Назад | Перейти на главную страницу

Многоступенчатый мониторинг CI или как я могу разделить шаги развертывания на управляемые блоки

Во-первых, я не ищу рекомендации по продукту (ну, я ищу, но это больше похоже на то, что я ищу решение проблемы, а не пытаюсь выбрать что-то из существующего списка)

Окружающая среда: я использую Jenkins для выполнения сложных многоэтапных заданий. Задание создает и настраивает серверы, развертывает на них ОС и стек приложений, заполняет стек демонстрационными данными, запускает стандартные тесты, затем несколько дополнительных отрицательных тестов, затем масштабирует стек с помощью нескольких дополнительных серверов и запускает еще несколько тестов.

Проблема: на любом из этих этапов может произойти сбой, либо просто неправильная конфигурация репортера, либо полный сбой для шага. В любом случае, я могу сделать в Jenkins одно из двух: выйти (1) или продолжить, выгрузив проблему на консоль. И то, и другое не очень хорошо, потому что у меня будет либо сломанная незавершенная работа (если я выйду), либо приятный зеленый ложный срабатывание, где, чтобы убедиться, что он действительно зеленый, мне нужно прочитать несколько мегабайт дампа журнала из приставка.

Что я ищу: способ для Jenkins или какой-либо другой системы, чтобы иметь возможность отслеживать и сообщать об успехе / неудаче каждого шага в работе отдельно, поддерживая согласованность работы (например, я не могу начать новую работу для каждого шага ), так что я могу видеть, например, что подготовка и развертывание ОС работают, стек развернут с ошибками, но завершен, а отрицательные тесты завершились неудачно, вместо текущего зеленого / красного статуса за запуск без каких-либо подробностей, если я не войду и не прочту журналы

Любые предложения приветствуются, будь то плагин для Jenkins, о котором я не знаю, или для другой системы, или что-то еще.

Используете ли вы конвейер в качестве кода для своих рабочих мест в Jenkins или связанных между собой традиционных работ в стиле фристайл? Если второе, то, хотя я знаю, что вы можете настроить выполнение задания, я уверен, что вы можете настроить его на отправку вам электронного письма в случае сбоя, верно?

Если вы решите использовать первое, вы можете добиться этого с помощью блока try and catch. У меня есть некоторые шаги, которые могут или не могут потерпеть неудачу, и они не являются препятствием. Итак, я заключаю шаг в блок try, а в catch я принудительно настрою сборку на успех и отправлю электронное письмо. Это выглядит так:

try {
  sh 'exit 1' //the step that might trigger a complete failure
}

catch(err) {
  currentBuild.result = 'SUCCESS' //force set the job to a success. i.e continue
  emailext ....   // email that the step failed
}