Jenkins从Jenkinsfile签出先前签出的代码的仓库回购

时间:2019-09-20 17:09:11

标签: git jenkins jenkins-pipeline

我对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'
        ...
      }
    }
  }
}

执行后,“ Build”阶段将根据我正在执行Jenkinsfile的分支下拉该分支,并覆盖“ Checkout”阶段(这是另一个分支)中先前签出的分支。 / p>

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

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

任何见识都会受到赞赏,因为我不仅希望应用这种“变通方法”,而且要正确解决问题。

谢谢。

1 个答案:

答案 0 :(得分:0)

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

然后在构建阶段,代理是docker容器,因此我猜想该仓库需要再次拉回存储库,因为容器工作区不包含来自checkout步骤的文件,因为它发生在不同的代理上。

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

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


祝你好运。