对于脚本管道,如何将Jenkins的工作阶段标记为已跳过

时间:2019-05-15 11:25:31

标签: jenkins jenkins-pipeline

使用脚本管道时,如何将阶段标记为已跳过。 我毫无疑问跳过声明式管道中的一个阶段。我刚刚设置

when {
  expression {<some boolean expression>}

}

如果表达式的计算结果为false,则跳过该阶段。 enter image description here

问题是,如果您尝试使用抄写管道来执行此操作,则会得到:

java.lang.NoSuchMethodError: No such DSL method 'when' found among steps

错误消息。这是因为声明性管道的DSL与脚本化管道不同   那么,怎么办呢?

2 个答案:

答案 0 :(得分:1)

解决此问题需要一点点黑客...(别担心,没什么花哨的东西)

执行此操作的方法是使用Jenkins的模块that can be found here

因此,要将阶段标记为已跳过,您需要调用静态方法 markStageSkippedForConditional ,以传递要跳过的阶段的名称。

假设您有一个名为“ mystage”的阶段。并且您想跳过它并标记为“已跳过”。 您的代码应类似于:

import org.jenkinsci.plugins.pipeline.modeldefinition.Utils

node() {
  stage('a'){
    echo 'stage 1'
  }
  stage('mystage'){
    if(true){
       echo 'skipping stage...'
       Utils.markStageSkippedForConditional('mystage')
    }else{
      echo 'This stage may be skipped'

    }
  }
  stage('b'){
    echo 'stage 2'
  }
}

请注意,由于Utils方法受到限制,因此您必须取消选中Use Groovy Sandbox复选框。

答案 1 :(得分:0)

说明性管道中,您可以使用:

stage('deploy') {
        when {  <some boolean expression> }
......
}

脚本管道中,您可以使用:

if(<some boolean expression>) {
stage('deploy') {
......
   }
}
上面的

都可以。我测试了