Вот моя история печали и отчаяния при попытке использовать декларативные конвейеры Jenkins для всего, что не является супертривиальным.

Я поддерживаю систему непрерывной интеграции/непрерывного тестирования Squid Web Cache, работающую на Jenkins.

Со временем я разработал несколько сборок Matrix, чтобы удовлетворить наши потребности в тестировании на разных платформах и операционных системах, и мне не терпелось упростить и унифицировать их. Мне грустно говорить, что конечный результат не очень хорош и определенно непригоден для использования.

Первая проблема: синтаксис Jenkinsfile ужасен

Не знаю (но могу себе представить) причин, но это причудливая смесь нескольких стилей. Газиллион вложенных блоков кода (хорошо) со смесью:

  • заголовок { блок }
  • заголовок («метка») { блок }
  • глагол аргумент [, аргумент, аргумент..]
  • имя глагола: аргумент, [имя: аргумент, …]
  • глагол (аргумент, …)

Выберите один или два и придерживайтесь их FFS!

Вторая проблема: переменные несовместимы

groovy-переменные нельзя использовать везде. Например, невозможно использовать groovy-массив в качестве аргумента предложения матричной оси. Что за… ?

Третья проблема: переменные сбивают с толку

Существует полмиллиона способов доступа к переменным, но не все они работают постоянно. Сценарии оболочки представляют собой строки, и ... используется ли там ${VAR}, расширяемый groovy или оболочкой?

Документация

Их много, но в них упущены некоторые весьма важные моменты. Например: могу ли я определить функции для абстрагирования общих частей? Как? Какие переменные связаны в функции?

Смертельный удар: слишком строгие ограничения на размер класса

Groovy разрешает только методы размером менее 64 КБ из-за каких-либо ограничений виртуальной машины Java.

Jenkinsfile размером 4 КБ, определяющий относительно простую трехмерную матрицу с исключениями, выходит за этот предел и не компилируется.

Другими словами: в настоящее время (июнь 2021 г.) декларативные конвейеры Jenkins — милая игрушка, но их нельзя использовать в реальной жизни для чего-то даже отдаленно сложного.