jenkins - jenkins如何强制下游项目只建一次?
问题描述
我正在使用 jenkins 声明式管道来构建我的项目。有3个项目:A,B和C。项目A是B和C的直接下游。每次项目B或C被触发(通过 Subversion 中的提交)时,它们都会产生一个工件(一个 SNAPSHOT),然后项目A将使用它。出于性能原因,我想强制项目A只构建一次,当项目B和C正在构建或它们在队列中等待时。
我如何使用声明性管道来实现这一点?
这是我的管道源代码:
答:
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。
推荐阅读
- javascript - 如何在 Chrome v81 中禁用同源策略
- unix - $PATH 中的“:”是什么意思?
- google-cloud-platform - 设置多个 Ubuntu 服务器
- javascript - 创建 n 个 JSON 数组的连续块
- javascript - 与缓存 SVG 数据相比,从磁盘读取 SVG 图标文件?
- javascript - 如何让其他计算机能够访问我的 socket.io 服务器
- vb.net - 当函数在VB.Net中可能有可变数量的参数时,将函数作为参数传递的有效且实用的方法?
- c# - MediaElement 在 WPF C# 中不显示视频
- r - 使用 lidR 绘制点云时的比例尺
- python - Django Robots.txt 更改内容类型标头