Развертывание и обработка ошибок

Установка уникальна для каждой АС. Сервис управления развертыванием ПО (услуга 1.31) поддерживает широкий набор языков программирования, включая скриптовые.
Для системного и прикладного ПО можно переиспользовать готовые плейбуки. Средства сборки (ant, maven) и языки программирования (например, python) уже настроены и доступны в качестве инструментов (tools).

Обработка ошибок

Любые потенциально ошибочные операции необходимо оборачивать в try-catch-finally. Это позволяет управлять ходом выполнения задания. Таким образом, нет смысла запускать тестирование сборки, которая не установилась.
В зависимости от серьезности ошибки можно менять значение переменной currentBuild.result на успешный, неуспешный или нестабильный. Если ошибка делает бессмысленным последующие шаги — рекомендуется остановить выполнение pipeline.
Пример с запуском тестов:
Раскрыть type=java
try {
  // пытаемся запустить тесты 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
}
Предыдущий раздел
Запуск задания
Следующий раздел
1.32 Аналитика и мониторинг производственного процесса
Была ли страница полезной?