【问题标题】:How can I create parallel stages in Jenkins scripted pipeline?如何在 Jenkins 脚本化管道中创建并行阶段?
【发布时间】:2021-09-14 21:48:20
【问题描述】:
我正在尝试在我的 Jenkins 管道代码中实现并行化,我可以在其中并行运行两个阶段。我知道这在声明性管道中是可能的,但我使用的是脚本化管道。
我试图通过这样做来实现这一点:
parallel(
stage('StageA') {
echo "This is branch a"
},
stage('StageB') {
echo "This is branch b"
}
)
当我运行它并在 Blue Ocean 中查看它时,这些阶段不会并行运行,而是在 StageA 之后执行 StageB。
脚本化的詹金斯管道中是否可以有并行阶段?如果有,怎么做?
【问题讨论】:
-
是的。 parallel() 函数采用 Map 的阶段(不是您的示例中的阶段列表),执行此操作。看看this answer。
标签:
groovy
continuous-integration
jenkins-pipeline
continuous-deployment
jenkins-groovy
【解决方案1】:
为脚本化管道尝试以下语法:
parallel(
"StageA": {
echo "This is branch a"
},
"StageB": {
echo "This is branch b"
}
)
在 Blue Ocean 中应该是这样的,这就是你所期望的吧?
如果您想在经典视图中查看阶段(和控制台输出),您可以像这样使用阶段:
parallel(
"StageA": {
stage("stage A") {
echo "This is branch a"
}
},
"StageB": {
stage("stage B") {
echo "This is branch b"
}
}
)
【解决方案2】:
这对我有用
stage('Check code quality') {
parallel {
stage('Run prospector') {
when {
expression { params.SKIP_PROSPECTOR == false }
}
steps {
checkout scm
sh 'echo "Running prospector..."'
sh 'make dockerized-run-prospector'
}
}
stage('Run Tests') {
when {
expression { params.SKIP_TESTS == false }
}
steps {
checkout scm
sh 'echo "Running tests..."'
sh 'make dockerized-test'
}
}
}
}
这会在父阶段并行运行阶段。
詹金斯蓝显示它是这样的