Многоэтапный мониторинг CI или как разделить этапы развертывания на управляемые куски
Прежде всего, я не ищу рекомендации по продукту (ну, да, но это больше похоже на то, как я ищу решение проблемы, а не пытаюсь выбрать что-то из существующего списка)
Окружающая среда: я использую Jenkins для выполнения сложных, многоэтапных заданий. Задание создает и подготавливает серверы, развертывает ОС и стек приложений на них, заполняет стек демонстрационными данными, запускает стандартные тесты, затем некоторые дополнительные отрицательные тесты, затем масштабирует стек с некоторыми более подготовленными серверами и выполняет еще несколько тестов.
Проблема: на любом из этих этапов может произойти сбой, либо просто неверная конфигурация репортера, либо полный сбой для шага. В любом случае, я могу сделать одну из двух вещей в Jenkins - выйти (1) или продолжить, сбросив проблему на консоль. И то, и другое не очень хорошо, потому что я получу либо сломанную незавершенную работу (если я выйду), либо хороший зеленый ложный положительный результат, где для того, чтобы убедиться, что он действительно зеленый, мне нужно прочитать несколько мегабайт дампов журнала из приставка.
Что я ищу: способ для Jenkins или какой-либо другой системы, чтобы иметь возможность отслеживать и сообщать об успехе / неудаче каждого шага в работе отдельно, поддерживая согласованность работы (например, я не могу начать новую работу для каждого шага), так что я могу видеть, например, что подготовка и развертывание ОС работали, стек развернут с ошибками, но завершен, и отрицательные тесты не пройдены, вместо текущего зеленого / красного состояния за цикл без подробностей, если я не захожу и не читаю бревна
Приветствуются любые предложения, будь то плагин для Jenkins, о котором я не знаю, или для другой системы, или для чего-то еще.
1 ответ
Используете ли вы конвейер в качестве кода для своих работ в Jenkins или для традиционных работ по фристайлу, связанных вместе? Если последнее, то, хотя я знаю, что вы можете настроить работу для продолжения, я уверен, что вы можете настроить его, чтобы отправить вам электронное письмо, когда происходит сбой, верно?
Если вы решите использовать первый, вы можете достичь этого с помощью блока try and catch. У меня есть некоторые шаги, которые могут или не могут потерпеть неудачу, и они не showtopper. Итак, я заключаю шаг в блок try и в улове, заставляю установить сборку успешно и отправляю электронное письмо. Это выглядит так:
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
}