Jenkins管道作为代码,存在Docker错误

Jenkins管道作为代码,存在Docker错误,docker,jenkins,jenkins-pipeline,Docker,Jenkins,Jenkins Pipeline,对于我在GitHub上的一个项目,我想将其构建为docker映像,并将其推送到我的docker hub。该项目是一个带有Scala代码库的sbt项目 下面是my Jenkins文件的定义: #!groovy node { // set this in Jenkins server under Manage Jenkins > Credentials > System > Global Credentials docker.withRegistry('https://h

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

下面是my 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}"
    }
  }
}
当我试图从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 repo中提取git。那么这里的问题是什么?我怎样才能做到这一点呢?

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

  • 固定Jenkins(版本2.32.3)内的管道构建
  • 在作业的配置中,我指定了一个子目录的签出:打开配置,例如
    https://myJenkins/job/my-job/configure
    。在底部,请参阅
    管道
    ->
    附加行为部分
    ->
    签入子目录
    ,其中回购的
    本地子目录
    设置为,例如,
    我的子目录
  • 期望值:签出时,
    Jenkinsfile
    将在
    my sub dir/Jenkinsfile
    中结束
  • 通过选项
    脚本路径
    ,您可以配置
    Jenkins文件的位置
    ,以便Jenkins可以启动构建。我将
    我的子目录/Jenkinsfile
    作为值
然后我收到了你在问题中粘贴的例外情况。我通过将
脚本路径
设置为
Jenkinsfile
来修复它。如果未指定要签出的子目录,请仍然尝试双重检查
脚本路径的值

注意:我有另一个詹金斯的例子在工作。在那里,我必须指定
脚本路径
,包括自定义签出子目录(如上所述)。

对于我来说,取消选中“轻型签出”修复了问题

转到作业-->配置-->管道并取消选中复选框轻型签出”

轻量级签出:选中,尝试直接从中获取管道脚本内容> 没有执行完全签出的SCM。此模式的优点 是它的效率;但是,您不会得到任何更改日志或轮询 基于SCM。(如果在生成过程中使用checkout SCM,则 填充变更日志并初始化轮询。)同时生成参数 在此模式下,将不会被替换到SCM配置中。仅 选定的SCM插件支持此模式


我很高兴其他人也有同样的问题,并设法解决了它,你能详细说明你是如何解决的吗?我无法从你上面描述的关于你如何解决问题的内容中理解。因此,你能更详细一点吗?试图澄清,请评论。我在詹金斯身上发现了哪些额外的行为?哪个版本你用的是Jenkins吗?虽然你的回答说你遇到了同样的问题,但我无法根据你所描述的解决我的问题!我想请你再详细说明一下!