Після років роботи з 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? Ми б раді про них почути.