Jenkins管道作为代码与Docker错误

时间:2017-03-28 19:23:23

标签: docker jenkins jenkins-pipeline

对于我在GitHub上的一个项目,我想将它构建为docker镜像并将其推送到我的docker hub。该项目是一个带有Scala代码库的项目。

以下是我的JenkinsFile的定义方式:

#DATE
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip

当我尝试从Jenkins服务器运行此程序时,出现以下错误:

#!groovy

node {
  // set this in Jenkins server under Manage Jenkins > Credentials > System > Global Credentials
  docker.withRegistry('https://hub.docker.com/', 'joesan-docker-hub-credentials') {
    git credentialsId: '630bd271-01e7-48c3-bc5f-5df059c1abb8', url: 'https://github.com/joesan/monix-samples.git'

    sh "git rev-parse HEAD > .git/commit-id"
    def commit_id = readFile('.git/commit-id').trim()
    println comit_id

    stage "build" {
      def app = docker.build "Monix-Sample"
    }

    stage "publish" {
      app.push 'master'
      app.push "${commit_id}"
    }
  }
}

由于这是在Azure上的VM内部运行,我认为VM无法到达外部,但似乎并非如此,因为我能够从Git仓库进入VM并git pull。那么这里的问题是什么?我怎么能做这个工作?

3 个答案:

答案 0 :(得分:5)

对我来说,取消选中“轻量级结帐”修复了问题

答案 1 :(得分:3)

我遇到了完全相同的错误。我的设置:

  • 在dockerized Jenkins(版本2.32.3)
  • 中构建流水线
  • 在作业配置中,我将签出指定到子目录中:打开配置,例如https://myJenkins/job/my-job/configure。在底部,请参阅Pipeline - >部分; Additional Behaviours - >将Check out into a sub-directory设置为Local subdirectory for repo的{​​{1}},例如my-sub-dir
  • 期望:退房时,Jenkinsfile最终会在my-sub-dir/Jenkinsfile
  • 通过选项Script path,您可以配置Jenkinsfile的位置,以便Jenkins可以开始构建。我把my-sub-dir/Jenkinsfile作为价值。

然后我收到了您在问题中粘贴的例外情况。我通过将Script Path设置为Jenkinsfile来修复它。如果您没有指定要检出的子目录,那么仍然可以尝试仔细检查Script Path的值。

注意:我有另一个Jenkins实例在工作。在那里,我必须指定Script Path,包括自定义签出子目录(如上面的期望中所述)。

答案 2 :(得分:0)

转到任务->配置->管道并取消选中复选框轻型结帐”

enter image description here

  

lightweight checkout:已选择,尝试直接从以下位置获取Pipeline脚本内容   SCM,而不执行完整的结帐。这种模式的优势   是它的效率;但是,您将不会获得任何变更日志或轮询   基于SCM。 (如果您在构建过程中使用checkout scm,这将   填充变更日志并初始化轮询。)同时构建参数   在此模式下不会被替换为SCM配置。只要   选定的SCM插件支持此模式。