Jenkins 管道:检测阶段是否使用“从阶段重新启动”图标启动

Bra*_*ira 2 jenkins jenkins-pipeline

假设我有一个声明性管道。我只想在使用“从阶段重新启动”图标时运行阶段?

在此输入图像描述

有没有办法做到这一点(方法,变量......)?我只想在使用“从舞台重新启动”时运行舞台

stage('Test') {
    when {
        expression {
            // An expression to detect if Restart from this stage is used
         }
    }
    steps {
        sh 'echo 1'
    }
}
Run Code Online (Sandbox Code Playgroud)

Noa*_*mer 5

您可以定义一个全局变量,该变量将保存一个布尔值,表示管道是从头开始还是从特定阶段执行,在第一个阶段中更新它,并稍后在条件中使用它来确定when是否从阶段重新启动。
就像是:

RESTART = true

pipeline {
    agent any

    stages {
        stage('Setup') {
            steps {
                script{
                    // signaling pipeline was executed from the beginning (first stage)
                    RESTART = false
                }
                // other setup steps
            }
        }
        stage('Test') {
            when {
                expression { return RESTART }
            }
            steps {
                sh 'echo 1'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

基于 @Pamela 使用条件的答案的另一个不错的选择是使用when 指令中的cause内置选项,从而避免使用和过滤所有原因的需要,并直接获取开箱即用的条件。 就像是:triggeredBygetBuildCauses()

stage('Test') {
   when { triggeredBy 'RestartDeclarativePipelineCause' }
   steps {
      sh 'echo 1'
   }
}
Run Code Online (Sandbox Code Playgroud)