Конвейер Jenkins не работает, если шаг нестабилен

В настоящее время мой конвейер не работает (красный), когда задание maven нестабильно (желтый).

node {
    stage 'Unit/SQL-Tests'
    parallel (
       phase1: { build 'Unit-Tests' }, // maven
       phase2: { build 'SQL-Tests' } // shell
    )
    stage 'Integration-Tests'
    build 'Integration-Tests' // maven
}

В этом примере результат задания Unit-Test нестабилен, но в конвейере отображается как сбойный.

Как я могу изменить задания / конвейер / jenkins, чтобы (1) этап конвейера был нестабильным вместо сбоя и (2) нестабильное состояние конвейера вместо сбоя.

Я попытался добавить MAVEN_OPTS параметр -Dmaven.test.failure.ignore=true, но это не помогло. Я не уверен, как превратить build 'Unit-Test' в некую логику, которая может уловить и обработать результат.

Добавление суб-конвейера с эта логика не работает, так как нет возможности выполнить извлечение из Subversion (эта опция доступна в обычном задании maven). Я бы не хотел использовать проверку из командной строки, если это возможно.


person michaelbahr    schedule 02.08.2016    source источник


Ответы (2)


Независимо от того, является ли шаг НЕСТАБИЛЬНЫМ или НЕУДАЧНЫМ, окончательный результат сборки в вашем скрипте будет НЕОБХОДИМ.

Вы можете добавить для распространения значение false по умолчанию, чтобы избежать сбоя потока.

def result = build job: 'test', propagate: false

В конце потока вы можете вынести вердикт об окончательном результате на основе того, что вы получили от переменной «результат».

Например

currentBuild.result='UNSTABLE'

Вот подробный пример Как установить текущий результат сборки в конвейере

Br,

Тим

person Tim    schedule 02.08.2016

Уроки выучены:

  • Jenkins будет постоянно обновлять конвейер в соответствии со значением currentBuild.result, которое может быть SUCCESS, UNSTABLE или FAILURE (source).
  • Результат build job: <JOBNAME> можно сохранить в переменной. Статус сборки находится в variable.result.
  • build job: <JOBNAME>, propagate: false предотвратит отказ всей сборки сразу.
  • currentBuild.result может только ухудшиться. Если это значение было ранее FAILED и получает новый статус с SUCCESS по currentBuild.result = 'SUCCESS', оно останется FAILED

Вот что я наконец использовал:

    node {
        def result  // define the variable once in the beginning
        stage 'Unit/SQL-Tests'
        parallel (
           phase1: { result = build job: 'Unit', propagate: false }, // might be UNSTABLE
           phase2: { build 'SQL-Tests' }
        )
        currentBuild.result = result.result  // update the build status. jenkins will update the pipeline's current status accordingly
        stage 'Install SQL'
        build 'InstallSQL'
        stage 'Deploy/Integration-Tests'
        parallel (
           phase1: { build 'Deploy' },
           phase2: { result = build job: 'Integration-Tests', propagate: false }
        )
        currentBuild.result = result.result // should the Unit-Test be FAILED and Integration-Test SUCCESS, then the currentBuild.result will stay FAILED (it can only get worse)
        stage 'Code Analysis'
        build 'Analysis'
    }
person michaelbahr    schedule 03.08.2016
comment
И вы не можете установить результат SUCCESS, если он уже был установлен на FAILED (как обсуждалось здесь. - person StephenKing; 03.08.2016
comment
Спасибо за информацию. Добавил это к ответу. - person michaelbahr; 03.08.2016
comment
Я с той же проблемой. До сих пор не понимаю причину. Почему нестабильное состояние считается ОТКАЗОМ, если плагин Stage View поддерживает нестабильность (желтый)? почему вам нужно постоянно устанавливать currentBuild.result, а не просто принимать самое худшее? - person lqbweb; 31.08.2017
comment
Обратите внимание, что результатом будет FAILURE, а не FAILED github.com/jenkinsci/jenkins/blob/ - person Mark W; 13.03.2018