Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git Jenkins签出之前从Jenkins文件签出的代码的回购覆盖_Git_Jenkins_Jenkins Pipeline - Fatal编程技术网

Git Jenkins签出之前从Jenkins文件签出的代码的回购覆盖

Git Jenkins签出之前从Jenkins文件签出的代码的回购覆盖,git,jenkins,jenkins-pipeline,Git,Jenkins,Jenkins Pipeline,我在Jenkins方面有一些经验,并且在过去的一年中开始使用Jenkins文件,但是,我遇到了一些我无法解释的事情(或者我只是在文档中还没有遇到) 我有一个Jenkins文件作为多分支管道的一部分。在这个Jenkins文件中,我基本上有: pipeline { agent any stages { stage('Checkout') { checkout(...) } stage('Build') { agent { d

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

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

pipeline {
  agent any

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

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

      steps {
        sh 'mvn -B clean package'
        ...
      }
    }
  }
}
执行时,“构建”阶段会根据我正在执行Jenkins文件的分支下拉分支,并覆盖“签出”阶段(另一个分支)中先前签出的分支

现在,如果我在Maven sh命令之前将“Checkout”步骤移动到“Build”阶段,它就可以工作了,但是我注意到,该阶段首先仍然像上面所描述的那样向下拉分支,然后“Checkout”步骤现在覆盖了该分支

所以,我猜这个特殊的“构建”阶段有一些特殊的地方我没有看到,因为我以前在其他项目中使用过这个特殊的方法,唯一的真正区别是在其他项目中没有指定代理,也不是基于Java的(我认为这与此无关)

如果有任何见解,我将不胜感激,因为我不想仅仅应用这个“变通方法”,而是想把它做好


提前感谢。

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

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

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

或者,正如您已经将签出阶段移到构建阶段一样



祝你好运。

这很有道理。我试着更换了整个管道的代理,它做到了你说的。谢谢你的解释!