如何在 jenkins 中强制下游项目只构建一次?



我正在使用 jenkins 声明式管道来构建我的项目。有3个项目:A,BC项目ABC的下游。每次触发项目BC时(通过 Subversion 中的提交(,它们都会生成一个工件(快照(,然后由项目A使用。出于性能原因,我想强制仅生成一次项目A,即在生成项目BC时或在队列中等待时。

如何使用声明性管道实现这一点?

以下是我的管道源代码:

pipeline {
agent any
tools {
maven "maven"
}
stages {
stage('Build') {
steps {
sh "mvn clean install"
}
}
}
}

pipeline {
agent any
tools {
maven "maven"
}
stages {
stage('Build') {
steps {
sh "mvn clean install"
}
}
}
post {
success {
build job: 'A', wait: false
}
}
}

三:

pipeline {
agent any
tools {
maven "maven"
}
stages {
stage('Build') {
steps {
sh "mvn clean install"
}
}
}
post {
success {
build job: 'A', wait: false
}
}
}

如注释中所述,发布包装器管道的基本代码片段:

pipeline {
stages {
stage('Trigger'){
// Initial trigger if needed
}
stage('Build B and C'){
parallel BuildB: {
when{
// Condition to evaluate
}
steps {
// Trigger pipeline B
}
},
BuildC: {
when{
// Condition to evaluate
}
steps {
// // Trigger pipeline C
}
}
}
stage('Build A'){
// Trigger pipeline A
}
}
}

此包装器管道将并行执行 B 和 C,只有在完成两者后,才会触发 A。

我终于找到了 Jenkins 处理这个问题的方法,那就是使用quietPriod(<time-to-wait-in-seconds>)。因此,管道A如下所示:

pipeline {
agent any
tools {
maven "maven"
}
options {
quietPeriod(30)
}
stages {
stage('Build') {
steps {
sh "mvn clean install"
}
}
}
}

例如,如果项目B触发下游项目 A,则A不会立即开始构建,而是等待 30 秒,然后开始构建。如果在这 30 秒内项目C(或项目B(启动并触发项目 A,则只生成一次A我发现这篇文章很有帮助。

最新更新