在Jenkins中锁定并行阶段
我们试图编写一个声明性的Jenkinsfile构建脚本,以便在每个阶段中并行运行几个步骤,但是我们需要防止多个构建同时运行,因为它们依赖于相同的资源。因此,我们尝试使用来锁定所有阶段,这样一个构建可以在另一个构建尝试使用相同资源之前完全完成 但是,我们发现锁定阶段需要,并且并行步骤只能包含在顶级阶段中:在Jenkins中锁定并行阶段,jenkins,groovy,jenkins-plugins,jenkins-pipeline,Jenkins,Groovy,Jenkins Plugins,Jenkins Pipeline,我们试图编写一个声明性的Jenkinsfile构建脚本,以便在每个阶段中并行运行几个步骤,但是我们需要防止多个构建同时运行,因为它们依赖于相同的资源。因此,我们尝试使用来锁定所有阶段,这样一个构建可以在另一个构建尝试使用相同资源之前完全完成 但是,我们发现锁定阶段需要,并且并行步骤只能包含在顶级阶段中: WorkflowScript:24:并行阶段或分支只能包含在顶级阶段中 基本上,我们要做的是: #!/usr/bin/env groovy pipeline { agent any
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")
}
}
}
}
}
}
您可能需要更新到
这将锁定整个作业的资源。如果您想为每个并行阶段锁定资源,我建议这些阶段不是并行的不幸的是,可能需要在跨构建共享的“全局”资源上进行锁定,比如远程测试环境。也就是说,不是针对同一构建的其他阶段进行保护,而是针对使用相同资源的其他构建进行保护。同样不幸的是,Jenkins管道的语法文档不足,似乎不允许这样做。