Jenkins -防止渠道/作业被多个上游项目触发-将一个构建限制为一个上游项目

sqougxex  于 2023-03-17  发布在  Jenkins
关注(0)|答案(2)|浏览(180)

我在网上搜索了很多,但没有找到这个问题的答案。
我们有两个项目AB,它们触发了一个公共项目C,因为它是管道步骤。现在,如果A触发了C(公共项目),并且B也几乎同时触发C,则只运行C的一个构建,并且结果由A和B使用。C中的构建状态同时显示“* 由上游项目A启动 ”和“ 由上游项目B启动 *”。
如何使项目C首先完成由A触发的生成,然后为B触发的生成启动新的生成?

fdx2calv

fdx2calv1#

当您启用Do not allow concurrent builds时会发生这种情况,除非Jenkins将运行视为唯一运行,否则它不会将其他作业排队,Jenkins会认为您正在尝试多次运行同一个作业。为了欺骗Jenkins,您需要在每次触发作业时更改一个参数,如果你使用相同的参数,它会认为这是同一个作业,所以在目标作业(作业C)中引入一个新的参数,并可能传递一些随机值,这将使它唯一。
在目标作业C中

string(name: 'UniqueString', defaultValue: 'o', description: 'something')

在触发作业A和B中,传递一些随机值,我传递

def randomValue = "${JOB_NAME}-${BUILD_ID}"
build wait: false, job: 'otherjob', parameters: [ string(name: 'UniqueString',value: "$randomValue") 
                    ...
           ]
1zmg4dgp

1zmg4dgp2#

我使用Jenkins中的lockable resource plugin解决了这个问题,所以项目A和B的Jenkinsfile如下所示

pipeline {
agent { ... }

stages {
    stage('Invoke project C') {
        steps {
            lock('project-c-lock') {
                script {
                    ...
                    ...
                }
            }      
        }
    }

}

因此,这一步只执行一次,同步就发生了。使用相同的锁资源名是很重要的。

相关问题