【问题标题】:Jenkins Checking out Repo overtop of Previously Checked Out Code from JenkinsfileJenkins 从 Jenkinsfile 签出之前签出的代码之上的 Repo
【发布时间】:2019-09-20 17:09:11
【问题描述】:

我在 Jenkins 方面有一些经验,并且在过去一年中开始使用 Jenkinsfiles,但是,我遇到了一些我无法解释的事情(或者我可能只是在文档中还没有遇到它)。

我有一个 Jenkinsfile 作为多分支管道的一部分。在那个 Jenkinsfile 中,我基本上有这个:

pipeline {
  agent any

  stages {
    stage('Checkout') {
      checkout(...)
    }

    stage('Build') {
      agent {
        docker {
          image 'maven:3-alpine'
          args '...'
        }
      }

      steps {
        sh 'mvn -B clean package'
        ...
      }
    }
  }
}

执行时,“构建”阶段会根据我在其中执行 Jenkinsfile 的分支拉下分支,并覆盖先前从“结帐”阶段(这是一个不同的分支)签出的分支。

现在,如果我在 Maven sh 命令之前将“Checkout”步骤移至“Build”阶段,它可以工作,但我注意到该阶段首先仍如上所述拉下分支,然后是“ Checkout" 步骤现在会覆盖该分支。

所以,我猜我错过了这个特定的“构建”阶段有一些特别之处,因为我之前在其他项目中使用过这种特殊的方法,唯一真正的区别是在其他项目中没有指定了代理并且它不是基于 Java 的(我认为这与它无关)。

任何见解都将不胜感激,因为我想不只是应用这个“解决方法”,而是把它做好。

提前致谢。

【问题讨论】:

    标签: git jenkins jenkins-pipeline


    【解决方案1】:

    在任何可用代理上运行的管道,因此它将带有 Jenkins 文件的存储库拉到随机选择的代理。

    然后在构建阶段,代理是 docker 容器,所以我猜测 repo 需要再次拉到容器中,因为容器工作区不包含结帐步骤中的文件,因为它发生在不同的代理上。

    您可以将整个管道的代理从任何更改为 docker 并将其从构建阶段删除,我想这将解决问题。

    或者就像您已经将结帐阶段移至构建阶段一样。


    祝你好运。

    【讨论】:

    • 这是有道理的。我尝试更改整个管道的代理,它按照你说的做了。谢谢你的解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 2016-10-07
    • 2020-10-11
    • 1970-01-01
    相关资源
    最近更新 更多