Как не справиться с заданием конвейера Jenkins в случае сбоя нижестоящих заданий - PullRequest
0 голосов
/ 04 октября 2018

У меня есть конвейер Jenkins master, который запускает 2 задания buildjob1 и buildjob2.

Мой master конвейер просто так:

   stage ("Test") {


                build (job: buildJob1,
                             parameters: [
                                    string(name: 'A', value: "AA),
                                    string(name: 'B', value: "BB),

                             ],
                             propagate: false)


              build (job: buildJob2,
                       parameters: [
                           string(name: 'A', value: "AA"),
                      ],
                     propagate: false)


        }


    cleanWs()
}

Я хочу, чтобы оба нижестоящих задания выполнялись и помечали основное задание как нестабильное / не выполненное в случае сбоя любого из заданий.
Как мне это сделать по конвейеру?

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Вы можете обернуть этот этап в try catch, если есть ошибки ==> сделать текущий статус сборки равным FAILURE

try {
    stage("Test") {
      build (job: buildJob1,
             parameters: [
               string(name: 'A', value: "AA"),
               string(name: 'B', value: "BB"),
             ],
             propagate: false)
      build (job: buildJob2,
             parameters: [
               string(name: 'A', value: "AA"),
               string(name: 'B', value: "BB"),
             ],
             propagate: false)
    }
} catch (error) {
    currentBuild.result='FAILURE'
}
0 голосов
/ 04 октября 2018

В случае, если задания не зависят друг от друга, используйте параллельно с параметром FailFast - и вам нужно удалить опцию распространения (или установить ее в значение true)

stage ("Test") {
    parallel buildJob1: {
        build (job: buildJob1,
            parameters: [
                string(name: 'A', value: "AA),
                string(name: 'B', value: "BB),
            ])
    }, buildJob2: {
        build (job: buildJob2,
            parameters: [
                string(name: 'A', value: "AA"),
            ])
    }, failFast: false
    }

cleanWs()
}

Редактировать: Как вы прокомментировали,что задания могут выполняться только последовательно, мы должны вручную проверить результат задания и вручную установить результат конвейерного задания.Таким образом, мы можем вызывать столько последовательных заданий, сколько захотим:

stage("buildjob1") {
    result = build (job: buildJob1,
        parameters: [
            string(name: 'A', value: "AA),
            string(name: 'B', value: "BB),
        ], propagate=false)
    // Inspect result
    if(result == 'FAILURE') {
        echo "buildjob1 failed"
        currentBuild.result = 'UNSTABLE' // of FAILURE
    }
}
stage("buildjob2") {
    result = build (job: buildJob2,
        parameters: [
            string(name: 'A', value: "AA"),
        ], propagate=false)
    // Inspect result
    if(result == 'FAILURE') {
        echo "buildjob2 failed"
        currentBuild.result = 'UNSTABLE' // of FAILURE
    }
}
stage("cleanup") {
    // Call your cleanup
    cleanWs()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...