当Jenkins任务被中止时运行Post Build脚本

25

是否有可能的方式/插件可以在Jenkins作业被中止时运行后构建脚本。我确实看到后构建插件提供了执行一组脚本的操作,但只能在成功或失败两个选项上运行。

4个回答

26
这个问题在这里得到了积极的回答。
即使作业被中止,Post Build Task插件仍然会运行。
您可以使用它来搜索日志文本中的"Build was aborted",并且可以指定要运行的shell脚本。
效果非常好。 :-)

我会尝试。然而问题在于 Jenkins 的状态是成功,而不是中止。 - fr0zt
2
链接的答案已经不存在了 :/ - matebende

6

对于声明式Jenkins pipeline,您可以按照以下方式实现:

pipeline {
    agent any

    options {
        timeout(time: 2, unit: 'MINUTES')   // abort on exceeding the timeout
    }

    stages {
        stage('Echo 1') {
           steps {
              echo 'Hello World'
          } 
        }
        stage('Sleep'){
            steps {
                sh 'sleep 180'
            }
        }
        stage('Wake up'){
            steps {
                echo "Woken up"
            }
        }
    }
    // this post part is executed if job is aborted
    post {
        aborted {
            script{
              echo "Damn it. I was aborted!"
            }
        }
    }
}

2
此外,当作业被中止时(https://www.jenkins.io/doc/book/pipeline/syntax/#post-conditions),`post` 步骤的 alwaysunsuccessfulcleanup 条件中的指令也会被执行。 - Joman68

2
据我所知,如果构建被中止,就没有办法再执行任何构建步骤(或后置构建步骤)了 - 这很合理,因为这是我对“中止”的期望。
您可以创建另一个作业来监视第一个作业的状态,并在它被中止时触发(例如,请参见BuildResultTrigger插件)。
另一种解决方案可能是创建一个“包装器”作业,将第一个作业作为构建步骤调用 - 这样,即使第一个作业被中止,您也可以在其完成后执行其他步骤,如检查其状态。

0
如果您使用脚本化的流水线,您可以始终使用try/catch/finally集合,在try块中执行构建操作,并将后续构建步骤放在finally块中。这样,即使构建失败,后续构建步骤也会被执行。
try {
        build here
}catch(FlowInterruptedException interruptEx){

    catch exception here
} finally {

    postBuild(parameters)

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接