Po latach pracy z GitLab CI/CD w różnych projektach, oto pięć praktyk, które konsekwentnie dostarczają szybsze, bardziej niezawodne pipeline’y.

1. Mądre używanie cache

Cache’owanie zależności między jobami, aby uniknąć ponownego pobierania:

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

key zapewnia, że różne gałęzie mają oddzielne cache.

2. Zrównoleglenie testów

Podziel swoją suite testową na wiele jobów:

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

To może skrócić czas testów z 20 minut do 5 minut.

3. Używaj rules: zamiast only/except

Nowsza składnia rules: jest bardziej potężna i czytelna:

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

4. Optymalizacja obrazów Docker

Używaj małych obrazów bazowych i multi-stage builds. Obrazy oparte na Alpine mogą być 10x mniejsze niż te oparte na Ubuntu.

5. Szybkie niepowodzenie

Umieść szybkie sprawdzenia (linting, formatowanie) na początku pipeline’u. Nie ma sensu uruchamiać 20-minutowej suite testowej, jeśli kod się nawet nie kompiluje.


Jakie są Twoje ulubione optymalizacje CI/CD? Chętnie o nich usłyszymy.