При работе с jenkins 2 (декларативными) конвейерами и maven у меня всегда возникает проблема с тем, как организовать вещи в конвейере, чтобы сделать его многоразовым и гибким.
С одной стороны, я хотел бы отделитьконвейер в логические этапы, такие как:
pipeline
{
stages
{
stage('Clean') {}
stage('Build') {}
stage('Test') {}
stage('Sanity check') {}
stage('Documentation') {}
stage('Deploy - Test') {}
stage('Selenium tests') {}
stage('Deploy - Production') {}
stage('Deliver') {}
}
}
С другой стороны, у меня есть Maven, который работает с
mvn clean deploy site
Просто я мог бы разделить Maven до
mvn clean
mvn deploy
mvn site
Но «развертывание» включает в себя все фазы жизненного цикла из
- проверки
- компиляции
- проверки
- пакета
- проверки
- install
- deploy
Итак, я видел множество примеров из пиплайна, которые делают такие вещи, как
sh 'mvn clean compile'
и
sh 'mvn test'
, что приводит к повторению шага проверки и компиляции во второй раз и тратит впустую «время / ресурсы» таким образом.Эту проблему можно решить, выполнив
sh 'mvn surefire:test'
вместо повторного запуска всего жизненного цикла.
Поэтому мой вопрос - каков наилучший способ добиться хорошего баланса между этапами трубопровода Дженкинса?а мавен жизненный цикл?Для меня я вижу два пути:
- Разделение жизненных циклов maven на максимально возможное число этапов конвейера - что приведет к лучшей обратной связи с пользователем jenkins (см., Какой этап не пройден и т. Д.)
- Пусть maven сделает все и использует конвейер jenkins только для работы с результатами maven (т.е. анализирует результаты модульных тестов и т. Д.)
Или я что-то не так понял в практике CI / CD?