jenkins - 在 Jenkins 中锁定并行阶段
问题描述
我们正在尝试编写一个声明性的 Jenkinsfile 构建脚本以在多个阶段中的每个阶段并行运行多个步骤,但是我们需要防止多个构建同时运行,因为它们依赖于相同的资源。因此,我们尝试使用锁定来锁定所有阶段,以便构建可以在另一个尝试使用相同资源之前完全完成。
但是,我们发现锁定阶段需要将阶段嵌套在父级中,并且并行步骤只能包含在顶级阶段中:
WorkflowScript: 24: Parallel stages or branches can only be included in a top-level stage
本质上,我们正在尝试做的是:
#!/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")
}
}
}
}
}
}
您可能需要更新到最新的管道代码 这会锁定整个作业的资源。如果您想锁定每个并行阶段的资源,我建议这些阶段不是并行的
推荐阅读
- windows - 在 Windows 上使用 ProxyCommand 的 SSH 配置无法连接
- jenkins - Jenkins docker build 无法执行 start:java.net.SocketException: Broken pipe (Write failed)
- flutter - Flutter Dart:底部对齐行小部件
- javascript - 使用 javascript 发布数据
- javascript - 如何在 React Native 的不同屏幕上显示或隐藏状态栏
- wordpress - 隐藏 WooCommerce 购物车中特定产品类别的 woocommerce-checkout-review-order 表
- c# - 改进 EFCore 查询以实现快速操作
- rust - 与不同网络上的计算机建立 TCP 连接,而无需收件人进入其路由器设置?
- python - python中seaborn线图上的标记
- c - 用字符串文字初始化 uint8_t 数组是否合法?