さまざまなプロジェクトでGitLab CI/CDを使用してきた経験から、一貫してより高速で信頼性の高いパイプラインを実現する5つのプラクティスをご紹介します。

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. only/exceptの代わりにrules:を使用

新しいrules:構文はより強力で読みやすい:

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

4. Dockerイメージを最適化

小さなベースイメージとマルチステージビルドを使用。Alpineベースのイメージは、Ubuntuベースの10分の1のサイズになります。

5. 早く失敗する

高速チェック(リンティング、フォーマット)をパイプラインの最初に配置。コードがコンパイルすらできないなら、20分のテストスイートを実行する意味はありません。


お気に入りのCI/CD最適化は何ですか?ぜひお聞かせください。