Развертывание и обработка ошибок
Установка уникальна для каждой АС. Сервис управления развертыванием ПО (услуга 1.31) поддерживает широкий набор языков программирования, включая скриптовые.
Для системного и прикладного ПО можно переиспользовать готовые плейбуки. Средства сборки (ant, maven) и языки программирования (например, python) уже настроены и доступны в качестве инструментов (tools).
Любые потенциально ошибочные операции необходимо оборачивать в
try-catch-finally
. Это позволяет управлять ходом выполнения задания. Таким образом, нет смысла запускать тестирование сборки, которая не установилась.В зависимости от серьезности ошибки можно менять значение переменной currentBuild.result на успешный, неуспешный или нестабильный. Если ошибка делает бессмысленным последующие шаги — рекомендуется остановить выполнение pipeline.
Пример с запуском тестов:
Раскрыть type=javatry { // пытаемся запустить тесты IBM Jazz // даже если тесты прошли успешно, утилита вернет код <> 0, нужно это обработать и принять решение об успешности тестирования withCredentials([ [$class: 'UsernamePasswordMultiBinding', credentialsId: 'SBT-ESBavto-WAS', passwordVariable: 'p', usernameVariable: 'u'] ]) { //def RQMRetCode = bat(script: «java -jar tool\\RQMExecutionTool.jar -tserId=${props.tserId} -projectName=${props.Project} -publicURI=https://hs22-33.<domain>.ru:9445/jazz -user=${env.u} -password=${env.u} -scriptId=${props.scriptId} -suiteStepAdapterIds=BDD-%COMPUTERNAME% -exitOnComplete=true -verbose=true», returnCode: true) def RQMRes = bat(script: «java -jar tool\\RQMExecutionTool.jar -tserId=${props.tserId} -projectName=${props.Project} -publicURI=https://hs22-33.<domain>.ru:9445/jazz -user=${env.u} -password=${env.u} -scriptId=${props.scriptId} -suiteStepAdapterIds=BDD-%COMPUTERNAME% -exitOnComplete=true -verbose=true», returnCode: true) } } catch (hudson.AbortException RQMErr) { // для дебага, вывод кода в лог println RQMErr.getMessage() // меняем статус билда в зависимости от ошибки println RQMErr.getMessage() def t = RQMErr.getMessage() // plrintln исключительно для дебага // Если приложение вернуло код, отличный от успешного (в данном случае это 20), помечаем этот пайплайн как UNSABLE через переменную currentBuild.result switch (t) { case 'script returned exit code 20': println(t) echo 'autoregress done' break case 'script returned exit code 21': println(t) println «Test failed.» err = RQMErr // делаем пометку, что сборка не идеальна currentBuild.result = «UNSTABLE» error t break case 'script returned exit code 3': println(t) println «Login failed. Either username or password is wrong.» err = RQMErr currentBuild.result = «UNSTABLE» error t break default: println(t) println «Test execution finished with error» println t err = RQMErr currentBuild.result = «UNSTABLE» error t } } finally { // Шаги с отправкой писем с результатом работы stage success/unstable libs.sendEmailNotification(currentBuild.result, stagename, recipients_email, details, ««, ««) echo currentBuild.result }