Сценарий конвейера Jenkins - остановить предыдущую сборку и распечатать сообщение при неудачной сборке - PullRequest
0 голосов
/ 16 июня 2020

Итак, я запускаю свой сценарий конвейера с этого фрагмента кода:

node {
if (env.JOB_NAME != 'Company/project/develop' && env.JOB_NAME != 'Company/project/master'){
    def jobName = env.JOB_NAME
    def job = Jenkins.instance.getItemByFullName(jobName)

    for (build in job.builds) {
        if (build.isBuilding() && build != job.builds.first()) {
            println '*' * 30
            println 'All previous builds for this job have been aborted!'
            println '*' * 30
            build.doStop()
        }}
    }
}

И он отлично работает. Он останавливает все предыдущие сборки для того же имени задания. Смысл этого в том, чтобы оптимизировать Jenkins, когда разработчики вводят слишком много кода, но последняя версия pu sh является только важной. Ветви master и development исключены из этого правила.

Я хотел бы немного расширить это, добавив причину прерывания. Я хотел бы напечатать в остановленной сборке, например: «Это задание было остановлено, потому что оно устарело ...»

Я пробовал много вещей, размещенных в stackoverflow, но мне это не удалось.

Спасибо

1 Ответ

0 голосов
/ 17 июня 2020

Вот моя реализация подобной функции. Он прервет предыдущую запущенную сборку и покажет причину «Прервано новой сборкой № 123»

import hudson.model.Result
import hudson.model.Run
import jenkins.model.CauseOfInterruption.UserInterruption

Run previousBuild = currentBuild.rawBuild.getPreviousBuildInProgress()

while (previousBuild != null) {
    if (previousBuild.isInProgress()) {
        def executor = previousBuild.getExecutor()
        if (executor != null) {
            echo ">> Aborting older build #${previousBuild.number}"
            executor.interrupt(Result.ABORTED, new UserInterruption("Aborted by newer build #${currentBuild.number}"))
        }
    }
    previousBuild = previousBuild.getPreviousBuildInProgress()
}
...