首页 > 解决方案 > 对于脚本化管道,如何将 Jenkins 的工作阶段标记为已跳过

问题描述

使用脚本化管道时如何将阶段标记为已跳过。在声明性管道中跳过一个阶段我没有问题。我刚设置

when {
  expression {<some boolean expression>}

}

如果表达式的计算结果为 false,则跳过该阶段。 在此处输入图像描述

问题是,如果您尝试使用脚本管道执行此操作,您会得到:

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

错误信息。这是因为声明式管道的 DSL 和脚本式管道不一样, 那么,怎么做呢?

标签: jenkinsjenkins-pipeline

解决方案


解决这个问题需要一点技巧......(别担心,没什么特别的)

做到这一点的方法是使用可以在此处找到的 Jenkins 模块。

因此,要将阶段标记为已跳过,您需要调用静态方法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'
  }
}

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


推荐阅读