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

这是我的JenkinsFile的定义方式:

#!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}"
    }
  }
}

当我尝试从Jenkins服务器运行此文件时,出现以下错误:
java.io.FileNotFoundException
    at jenkins.plugins.git.GitSCMFile$3.invoke(GitSCMFile.java:167)
    at jenkins.plugins.git.GitSCMFile$3.invoke(GitSCMFile.java:159)
    at jenkins.plugins.git.GitSCMFileSystem$3.invoke(GitSCMFileSystem.java:161)
    at org.jenkinsci.plugins.gitclient.AbstractGitAPIImpl.withRepository(AbstractGitAPIImpl.java:29)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.withRepository(CliGitAPIImpl.java:65)
    at jenkins.plugins.git.GitSCMFileSystem.invoke(GitSCMFileSystem.java:157)
    at jenkins.plugins.git.GitSCMFile.content(GitSCMFile.java:159)
    at jenkins.scm.api.SCMFile.contentAsString(SCMFile.java:338)
    at org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:101)
    at org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:59)
    at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:232)
    at hudson.model.ResourceController.execute(ResourceController.java:98)
    at hudson.model.Executor.run(Executor.java:404)
Finished: FAILURE

由于这是在Azure上的VM内运行的,因此我认为VM无法到达外部,但事实并非如此,因为我能够通过SSH进入VM并从Git存储库中进行git pull了。那么这是什么问题呢?我该如何进行这项工作?

最佳答案

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

  • 在dockerized Jenkins (版本2.32.3)中的管道构建
  • 在作业的配置中,我指定了一个进入子目录的 checkout :打开配置,例如https://myJenkins/job/my-job/configure。在底部,请参阅Pipeline-> Additional Behaviours-> Check out into a sub-directory部分,其中Local subdirectory for repo设置为my-sub-dir
  • 期望值: checkout 后,Jenkinsfilemy-sub-dir/Jenkinsfile结尾。
  • 通过选项Script path,您可以配置Jenkinsfile的位置,以便Jenkins可以开始构建。我把my-sub-dir/Jenkinsfile作为值。

  • 然后,我收到了您在问题中粘贴的异常。我通过将Script Path设置为Jenkinsfile来修复它。如果您没有指定要 check out 的子目录,请仍然尝试仔细检查Script Path的值。

    注意:我还有另一个Jenkins实例在工作。我必须在其中指定Script Path,其中包括自定义 checkout 子目录(如上文“期望”中所述)。

    关于docker - Jenkins管道为代码,但出现Docker错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43078203/

    10-09 01:58