我们正在尝试编写一个声明性 Jenkinsfile 构建脚本,以便在多个阶段的每个阶段并行运行多个步骤,但是我们需要防止多个构建同时运行,因为它们依赖于相同的资源。因此,我们尝试使用 locking锁定所有阶段,以便构建可以在另一个构建尝试使用相同资源之前完全完成。
但是,我们发现锁定阶段需要 nesting the stages in a parent并且并行步骤只能包含在顶级阶段:
WorkflowScript:24:并行阶段或分支只能包含在顶级阶段
本质上我们想做的是:
#!/usr/bin/env groovy
pipeline {
agent any
stages {
stage('parent') {
options {
lock('resource')
}
stages {
stage('build') {
steps {
parallel(
'app1': { build("app1") },
'app2': { build("app2") },
)
}
}
stage('deploy') {
steps {
parallel(
'app1': { deploy("app1") },
'app2': { deploy("app2") },
)
}
}
}
}
}
}
是否有任何解决方法可以实现此行为?
最佳答案
这能解决您的问题吗?
pipeline {
agent any
options {
lock('resource')
}
stages {
stage('build') {
parallel {
stage('app1') {
steps {
echo("build app1")
}
}
stage('app2') {
steps {
echo("build app2")
}
}
}
}
stage('deploy') {
parallel {
stage('app1') {
steps {
echo("deploy app1")
}
}
stage('app2') {
steps {
echo("deploy app2")
}
}
}
}
}
}
您可能需要更新到 latest pipeline code 这会锁定整个作业的资源。如果您想锁定每个并行阶段的资源,我建议阶段不并行
关于jenkins - 在 Jenkins 中锁定并行阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52535044/