[英]Jenkins pipeline multibranch issue reusing node type after parallel jobs
我正在尝试将我们的CI流程从JobDSL迁移到多分支管道设置。 作为第一步,我决定只将管道委托返回到现有作业(传递所需的参数)我的管道如下所示(伪代码)
stage('setup')
node('cotroller') {
...
}
stage('test') {
parallel {
'web' : {build job 'web-test' ..params...},
'API' : {build job 'api-test' ..params...}
}
}
stage('build') {
parallel {
'web' : {build job 'web-build' ..params...},
'API' : {build job 'api-build' ..params...}
}
}
stage('publish') {
node('controller'){
sh './gradlew publishArtifacts'
}
}
但是我在最后的“发布”阶段遇到了问题。 当启动gradle目标时,它可以正确地重用'setup'阶段中的工作空间,但是似乎在原始结帐的'durable'子文件夹中执行(即,过去在setup阶段中在/mnt/jenkins/workspace/<branchname>/<random_hash>/
但是最后一个gradle目标在/mnt/jenkins/workspace/<branchname>/<random_hash>@tmp/durable-<hash>/script.sh
等文件夹中执行在gradlew中找不到错误
我试过使用目录('/ ...'){...},但这似乎并没有解决问题...任何帮助或指导都将不胜感激!
您可以尝试在setup
阶段保存工作目录,例如:
stage('setup')
node('cotroller') {
def setupPath = pwd()
...
}
stage('test') {
parallel {
'web' : {build job 'web-test' ..params...},
'API' : {build job 'api-test' ..params...}
}
}
stage('build') {
parallel {
'web' : {build job 'web-build' ..params...},
'API' : {build job 'api-build' ..params...}
}
}
stage('publish') {
node('controller'){
dir("${setupPath}") {
sh './gradlew publishArtifacts'
}
}
}
根据Jenkins pipeliens教程的建议 ,方法是在Jenkin的Global Tool configuration
配置Gradle安装路径,将其命名为任何名称(例如“ Gradle
”),然后像这样在您的管道中使用它:
...
stage('publish') {
node('controller'){
def gradleHome = tool 'Gradle'
sh "${gradleHome}/bin/gradlew publishArtifacts'
}
}
常规语法对我不起作用。 不得不将其更改为:
stage('test') {
parallel (
'web' : {build 'web-test' ..params...},
'API' : {build 'api-test' ..params...}
)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.