Сбой конвейера 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'
}