Каким должен быть task runner для сборки проектов
Соображения по поводу того, каким хотелось бы видеть инструмент для запуска многошагового CI/CD
процесса проектов
-
Процесс сборки разделён на атомарные логические единицы - шаги сборки
-
Чтобы описать весь процесс прописываем какие шаги сборки нам нужны в нём, корневой шаг сборки
-
Шаги сборки могут иметь другие вложенные шаги сборки, получается дерево шагов сборки
-
Шаги сборки могут зависеть от результатов работы предыдущих шагов сборки, исходящие результаты одних шагов передаются в параметры других шагов
-
Инструмент сам разрешает порядок выполнения шагов по их зависимости друг от друга
-
Шаги сборки могут выполняться как последовательно так и параллельно, это решает инструмент
-
Интерфейс шага сборки имеет строгое декларативное описание:
- Структура и типы входящих параметров
- Структура и типы исходящих результатов
-
Инструмент выполняет валидацию параметров и результатов шагов сборки, не пропуская некорректные данные
-
Исходящие данные одного шага сборки можно передать во входящие параметры другого шага
-
Исходящие данные шага сборки можно получить в
JSON
или другом формате -
Описание сборки выполняется на языке программирования, что позволяет
- Генерировать шаги сборки с разными параметрами (матрица, комбинации параметров)
- Читать файлы
- Задавать сложные условия и выражения для вычисления параметров
- В разных шагах сборки можно использовать объекты описанные где-то в одном месте, не надо ничего копипастить
- Из библиотек доступно множество функций для удобной реализации логики сборки
-
Используемый язык хорошо поддерживается в популярных
IDE
-
Есть интеграция в
IDE
через плагин -
Есть удобный встроенный шаблонизатор для генерации файлов скриптов и конфигов
-
Перед запуском сборки можно посмотреть сгенерированную конфигурацию
-
Возможность описать шаги и процесс сборки по-умолчанию и применять его во многих проектах
-
Предусмотрено версионирование шагов и процесса сборки, в проектах можно переходить на новую версию процесса сборки по мере необходимости и возможности
-
В проекте можно переопределить логику выполнения любого шага сборки, при этом можно вызвать логику шага по-умолчанию
-
В описании шага сборки можно указать docker контейнер, в котором его необходимо запустить (для
CI/DI
окружения) -
При запуске сборки настройкой можно отключить использование docker контейнеров и все шаги запускать как есть на машине (для локальной разработки)
-
Можно запустить не только весь процесс, но и отдельные его части
-
Результат шага кешируется и берётся из кеша, если входные данные не изменились (инкрементальная сборка)
-
Инструмент имеет большое развитое сообщество и поддержку больших компаний
-
Есть множество плагинов для выполнения различных типовых задач
-
Есть встроенный механизм управления версией самого инструмента, не нужно использовать внешние
-
Нет политических, коммерческих, технических ограничений со стороны авторов
Кандидаты
- Gradle
- Terraform
- Bazel