Перейти к основному содержимому

Каким должен быть task runner для сборки проектов

· 2 мин. чтения
Дмитрий Чудный
Автор сайта

Соображения по поводу того, каким хотелось бы видеть инструмент для запуска многошагового CI/CD процесса проектов

  • Процесс сборки разделён на атомарные логические единицы - шаги сборки

  • Чтобы описать весь процесс прописываем какие шаги сборки нам нужны в нём, корневой шаг сборки

  • Шаги сборки могут иметь другие вложенные шаги сборки, получается дерево шагов сборки

  • Шаги сборки могут зависеть от результатов работы предыдущих шагов сборки, исходящие результаты одних шагов передаются в параметры других шагов

  • Инструмент сам разрешает порядок выполнения шагов по их зависимости друг от друга

  • Шаги сборки могут выполняться как последовательно так и параллельно, это решает инструмент

  • Интерфейс шага сборки имеет строгое декларативное описание:

    • Структура и типы входящих параметров
    • Структура и типы исходящих результатов
  • Инструмент выполняет валидацию параметров и результатов шагов сборки, не пропуская некорректные данные

  • Исходящие данные одного шага сборки можно передать во входящие параметры другого шага

  • Исходящие данные шага сборки можно получить в JSON или другом формате

  • Описание сборки выполняется на языке программирования, что позволяет

    • Генерировать шаги сборки с разными параметрами (матрица, комбинации параметров)
    • Читать файлы
    • Задавать сложные условия и выражения для вычисления параметров
    • В разных шагах сборки можно использовать объекты описанные где-то в одном месте, не надо ничего копипастить
    • Из библиотек доступно множество функций для удобной реализации логики сборки
  • Используемый язык хорошо поддерживается в популярных IDE

  • Есть интеграция в IDE через плагин

  • Есть удобный встроенный шаблонизатор для генерации файлов скриптов и конфигов

  • Перед запуском сборки можно посмотреть сгенерированную конфигурацию

  • Возможность описать шаги и процесс сборки по-умолчанию и применять его во многих проектах

  • Предусмотрено версионирование шагов и процесса сборки, в проектах можно переходить на новую версию процесса сборки по мере необходимости и возможности

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

  • В описании шага сборки можно указать docker контейнер, в котором его необходимо запустить (для CI/DI окружения)

  • При запуске сборки настройкой можно отключить использование docker контейнеров и все шаги запускать как есть на машине (для локальной разработки)

  • Можно запустить не только весь процесс, но и отдельные его части

  • Результат шага кешируется и берётся из кеша, если входные данные не изменились (инкрементальная сборка)

  • Инструмент имеет большое развитое сообщество и поддержку больших компаний

  • Есть множество плагинов для выполнения различных типовых задач

  • Есть встроенный механизм управления версией самого инструмента, не нужно использовать внешние

  • Нет политических, коммерческих, технических ограничений со стороны авторов

Кандидаты