gpt4 book ai didi

Jenkinsfile - 脚本管道语法中的条件阶段执行

转载 作者:行者123 更新时间:2023-12-03 15:52:40 27 4
gpt4 key购买 nike

我们正在使用 脚本管道 我们 Jenkinsfile 的语法它定义了很多阶段来构建和部署我们的代码。我们有一个用例,如果我在做 ,我想运行我的所有阶段。完整版 但如果我需要执行一些 AWS 路由,则只运行一个特定阶段。我知道我可以使用 if(<expression>)跳过一个阶段或运行一个阶段。问题是我不想申请 if我的每个阶段的条件Jenkinsfile .

中新声明式管道 使用 stage..when 很容易实现这种语法选项。我们的基础架构中使用了很多自定义的 Groovy 辅助函数,因此我目前无法从 切换。脚本管道 新语法 声明式管道 句法。我在现有的 Jenkinsfile 上做了什么是这样的。。

原始 Jenkinsfile

  stage('Checkout Code') {}
stage('Build') {}
parallel(
stage('Sonar Analysis') {}
stage('CLM Analysis') {}
stage('Security Analysis') {}
)
stage('Build Docker Image') {}
...
...
stage('QA Deploy') {}
stage('QA Routing') {}
...
...
stage('Prod Deploy') {}
stage('Prod Routing') {}

变成
  if (fullDeploy){
stage('Full Build') {
stage('Checkout Code') {}
stage('Build') {}
parallel(
stage('Sonar Analysis') {}
stage('CLM Analysis') {}
stage('Security Analysis') {}
)
stage('Build Docker Image') {}
...
...
stage('QA Deploy') {}
stage('QA Routing') {}
...
...
stage('Prod Deploy') {}
stage('Prod Routing') {}
}
}

if (routeOnly){
stage('Prod Routing') {}
}

这对我来说感觉有点麻烦,我在 Jenkins 文档上找不到任何提供这样做的好方法的东西。

有没有人有更好的方法可以将其合并?

最佳答案

我也不喜欢有一个多余的想法 如果{} 阻止我的 阶段{} .
我通过如下覆盖舞台解决了这个问题

def stage(name, execute, block) {
return stage(name, execute ? block : {echo "skipped stage $name"})
}

现在您可以按如下方式禁用阶段
stage('Full Build', false) { 
...
}

更新
您还可以使用以下 def 标记跳过的阶段
import org.jenkinsci.plugins.pipeline.modeldefinition.Utils

def stage(name, execute, block) {
return stage(name, execute ? block : {
echo "skipped stage $name"
Utils.markStageSkippedForConditional(STAGE_NAME)
})
}

关于Jenkinsfile - 脚本管道语法中的条件阶段执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45777169/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com