Сбой конвейера 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
}
в этом примере результат модульного теста задания нестабилен, но показан как сбой в конвейере.
как я могу изменить задания / конвейер/Дженкинс, чтобы (1) шаг конвейера был нестабильным вместо failed и (2) состояние конвейера было нестабильным вместо failed.
Я пробовал добавлять MAVEN_OPTS параметр -Dmaven.test.failure.ignore=true, но это не решит проблему. Я не уверен как обернуть build 'Unit-Test' в некоторую логику, которая может поймать и обработать результат.
добавление под-трубопровода с эта логика не делает трюк, так как нет возможности проверить из subversion (эта опция доступна в обычном задании maven). Я бы не хотел использовать CommandLine checkout, если это возможно.
2 ответов
какой бы шаг не был нестабильным или неудачным, конечный результат сборки в вашем скрипте будет неудачным.
вы можете добавить propagate в false по умолчанию, чтобы избежать сбоя потока.
def result = build job: 'test', propagate: false
в конце потока вы можете вынести вердикт окончательный результат на основе того, что вы получили от переменной "результат".
currentBuild.result='UNSTABLE'
вот подробный пример Как установить текущий результат сборки в Трубопровод
Br,
Тим
уроки:
- Дженкинс будет постоянно обновлять трубопровод в соответствии с
currentBuild.resultзначение, которое может быть либоSUCCESS,UNSTABLEилиFAILURE(источник). - результат
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'
}