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

我们正在使用 语法,Jenkinsfile其中定义了很多阶段来构建和部署代码。我们有一个用例,如果我要执行

运行所有阶段,但是如果需要执行一些AWS路由,则只运行一个特定阶段。我知道我可以使用if(<expression>)跳过阶段或运行阶段。问题是我不想将这个if条件应用于我的每个阶段Jenkinsfile

在新的

语法中,使用该stage..when选项很容易实现。我们的基础架构中使用了许多自定义的Groovy帮助器函数,因此,此时我无法从 语法切换到新的 语法。我最终在现有设备上所做的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-脚本管道语法中的条件阶段执行 的全部内容, 来源链接: utcz.com/qa/419800.html

回到顶部