Home > Blockchain >  Jenkins pipeline: detect if a stage is started with the "Restart from stage" icon
Jenkins pipeline: detect if a stage is started with the "Restart from stage" icon

Time:11-29

Let's say I have a declarative pipeline. I want to run a stage only when 'Restart from stage' icon is used ?

enter image description here

Is there a way to do this (a method, a variable...)? I want to run the stage only if "Restart from stage" is used

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

Thanks in advance!

CodePudding user response:

You can define a global variable that will hold a Boolean value representing if the pipeline was executed from the beginning or from a specific stage, update it in your first stage and use it later on in the when condition to determine if a restart from stage has occurred.
Something like:

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'
            }
        }
    }
}

Although depends on what exactly are you trying to achieve there might be a more elegant solution.

CodePudding user response:

You can use currentBuild.getBuildCauses(): https://www.jenkins.io/doc/pipeline/examples/#get-build-cause

Then in your Test stage add when expression checking the cause of the build matches the one you need.

  • Related