После лет работы с GitLab CI/CD в различных проектах, вот пять практик, которые стабильно обеспечивают более быстрые и надёжные пайплайны.

1. Умное использование кеширования

Кешируйте зависимости между джобами, чтобы избежать повторной загрузки:

cache:
  key: ${CI_COMMIT_REF_SLUG}
  paths:
    - node_modules/
    - .npm/

key обеспечивает отдельные кеши для разных веток.

2. Параллелизация тестов

Разделите тестовый набор на несколько джобов:

test:
  parallel: 4
  script:
    - npm run test -- --shard=$CI_NODE_INDEX/$CI_NODE_TOTAL

Это может сократить время тестирования с 20 минут до 5.

3. Используйте rules: вместо only/except

Новый синтаксис rules: мощнее и читабельнее:

deploy:
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
      when: on_success
    - when: never

4. Оптимизация Docker образов

Используйте маленькие базовые образы и multi-stage сборки. Образы на базе Alpine могут быть в 10 раз меньше Ubuntu-based.

5. Быстрый провал

Ставьте быстрые проверки (линтинг, форматирование) в начало пайплайна. Нет смысла запускать 20-минутный тестовый набор, если код даже не компилируется.


Какие ваши любимые оптимизации CI/CD? Мы будем рады о них услышать.