Jenkins声明性管道有条件的后期行动

Mik*_*ert 7 jenkins jenkins-pipeline

我正在使用Jenkins声明性管道,并希望根据构建状态执行一些后期构建操作.

更准确地说,我想在构建状态发生变化时发送电子邮件(从成功到失败,或成功到不稳定或成功失败).

这是我的管道:

pipeline {
    agent none
    stages {
        stage('test') {
            agent any
            steps {                
                sh './tests.sh'
            }
        }
    }
    post {
        changed {
            // Send different emails depending on build status
            // Success       -> anything else
            // Anything else -> Success
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

任何的想法 ?

Jon*_*kis 12

对于写条件,您可以定义自己的方法.

例如,如果您只想在构建状态更改时发送电子邮件:

def notifyStatusChangeViaEmail(buildStatus) {
    def status

    switch (buildStatus) {
        case 'SUCCESS':
            status = 'is now green again!'
            break

        case 'UNSTABLE':
            status = 'has become unstable..'
            break

        case 'FAILURE':
            status = 'has turned RED :('
            break
    }

    emailext (
        subject: "Job '${env.JOB_NAME}' ${status}",
        body: "See ${env.BUILD_URL} for more details",
        recipientProviders: [
            [$class: 'DevelopersRecipientProvider'], 
            [$class: 'RequesterRecipientProvider']
        ]
    )
}

pipeline {
    ...

    post {
        changed {
            // Will trigger only when job status changes: GREEN -> RED, RED -> GREEN, etc
            notifyStatusChangeViaEmail(currentBuild.currentResult)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,您还希望将notifyStatusChangeViaEmail方法定义放在共享管道库中,以便可以在其他作业/管道中重复使用它.