Search code examples
jenkinsjenkins-pipeline

jenkins (declarative) pipeline post action 'success' before 'always'?


Is it possible to do "success" post build before "always" ?

For exemple, if I do that :

post {
    success{
        archiveArtifacts artifacts: 'server/target/*.jar'
        deleteDir ()
    }
    always{
        deleteDir()
    }

}

In console Output it's done upside down...

" [Pipeline] deleteDir

[Pipeline] archiveArtifacts Archiving artifacts "

To bypass that, I use :

success{
        archiveArtifacts artifacts: 'server/target/*.jar'
        deleteDir ()
    }
    failure{
        deleteDir()
    }
    aborted{
        deleteDir()
    }
}

Solution

  • You can use cleanup stage.

    Example: https://github.com/jenkinsci/pipeline-model-definition-plugin/blob/83abd0ec35960c1f2a37b6a66b2d26385b2962e2/pipeline-model-definition/src/test/resources/postChecksAllConditions.groovy

    pipeline {
        agent none
        stages {
            stage("foo") {
                steps {
                    echo "hello"
                }
            }
        }
        post {
            always {
                error "I AM FAILING NOW"
            }
            success {
                echo "MOST DEFINITELY FINISHED"
            }
            failure {
                echo "I FAILED"
            }
            cleanup {
                echo "I RAN ANYWAY"
            }
        }
    }
    

    PR: https://github.com/jenkinsci/pipeline-model-definition-plugin/commit/83abd0ec35960c1f2a37b6a66b2d26385b2962e2#diff-136d8ce8670181449534f5b993a87051