#python-3.x #jenkins #jenkins-pipeline
Вопрос:
Этап в моем конвейере Дженкинса должен быть установлен как нестабильный в зависимости от кода завершения сценария в его шагах: 2 должен установить статус этапа как нестабильный, когда 1 должен установить результат этапа как неудачный.
Как этого добиться? Я проверил «Ошибка», но, похоже, она не отличается от статуса «сбой», предлагая только способ поймать выход, отличный от 0 (1,2…).
pipeline { agent any parameters { string(name: 'FOO', defaultValue: 'foo', description: 'My foo param') string(name: 'BAR', defaultValue: 'bar', description: 'My bar param') } stages { stage('First') { steps { // If "script.py" exit code is 2, set stage to unstable // If "script.py" exit code is 1, set stage to failed sh """ . ${WORKSPACE}/venv/bin/activate python ${WORKSPACE}/script.py --foo ${FOO} --bar ${BAR} deactivate """ } } } stage('Second') { steps { echo('Second step') } } } }
Комментарии:
1. Мой ответ был обновлен/исправлен в соответствии с вашими требованиями
Ответ №1:
Решение
Вам нужно будет выполнить следующие действия
- Поместите весь свой код в
script
блок - Изменить
sh
, чтобы вернуть код состояния - Используйте условное условие для проверки кода состояния
- Бросьте и поймайте ошибку с
catchError
помощью . Установите сборку на УСПЕХ, а этап-на СБОЙ или НЕСТАБИЛЬНОСТЬ соответственно
Я использую
error
для принудительного исключения, но вы также можете использоватьsh 'exit 1'
илиthrow new Exception('')
pipeline { agent any parameters { string(name: 'FOO', defaultValue: 'foo', description: 'My foo param') string(name: 'BAR', defaultValue: 'bar', description: 'My bar param') } stages { stage('First') { steps { script { def pythonScript = """ . ${WORKSPACE}/venv/bin/activate python ${WORKSPACE}/script.py --foo ${FOO} --bar ${BAR} deactivate """ def statusCode = sh( script:pythonScript, returnStatus:true ) if(statusCode == 2) { catchError(buildResult: 'SUCCESS', stageResult: 'UNSTABLE') { error 'STAGE UNSTABLE' } } else if(statusCode == 1) { catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { error 'STAGE FAILURE' } } } } } } }
Комментарии:
1. спасибо за ваш ответ, но мне нужно, чтобы результат этапа был НЕСТАБИЛЬНЫМ, а не вся сборка.
2. @donmelchior пожалуйста, дайте мне знать, удовлетворяет ли это обновление вашим требованиям. Я понимаю , что вы сказали, что пытались
catchError
, но это не похоже на то, что вы ввелиcatchError
условные обозначения, и вы не получили код возврата для сравнения3. Это именно то, что мне нужно, спасибо
4. @donmelchior отлично. Пожалуйста. Спасибо, что приняли ответ и поддержали