我对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的(不是我认为与它有关)。
任何见识都会受到赞赏,因为我不仅希望应用这种“变通方法”,而且要正确解决问题。
谢谢。
答案 0 :(得分:0)
可在任何可用代理上运行的管道,因此它将带有Jenkins文件的回购拉到随机选择的代理。
然后在构建阶段,代理是docker容器,因此我猜想该仓库需要再次拉回存储库,因为容器工作区不包含来自checkout步骤的文件,因为它发生在不同的代理上。
您可以将整个管道的代理从任何更改为docker,并将其从构建阶段删除,我想这将解决问题。
或者像您已经将结帐阶段移至构建阶段一样。
祝你好运。