22

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

4

4 回答 4

24

这个问题在这里得到了肯定的回答。

即使作业被中止,Post Build Task 插件也会运行

使用它在日志文本中搜索“Build was aborted”,您可以指定要运行的 shell 脚本。

奇迹般有效。:-)

于 2014-08-28T07:44:03.553 回答
3

对于声明式 Jenkins 管道,您可以按如下方式实现:

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!"
            }
        }
    }
}
于 2020-10-21T06:51:31.577 回答
2

据我所知,如果构建被中止,则无法再在其中执行任何构建步骤(或构建后步骤) - 这是有道理的,这就是我对“中止”的期望。

您可以做的是创建另一个作业来监视第一个作业的状态,并在它被中止时触发(例如,参见BuildResultTrigger插件)。

另一种解决方案可能是创建一个“包装器”作业,它将第一个作业称为构建步骤 - 这样您就可以在其完成后执行其他步骤,例如检查其状态,即使它已中止。

于 2014-07-30T23:00:05.687 回答
0

如果您使用脚本化管道,则始终可以使用 try/catch/finally 集,其中构建在 try 块中执行,而 postbuild 步骤在 finally 块中。这样,即使构建失败,也会执行构建后的步骤。

try {
        build here
}catch(FlowInterruptedException interruptEx){

    catch exception here
} finally {

    postBuild(parameters)

}
于 2019-01-11T20:38:20.980 回答