CI/CD パイプライン構築コース

速く信頼できるCI — テスト、cache、matrix、通知

CIの目的は、開発を止めることではなく、本番に出す前に異常を再現可能な形で見つけることです。実行場所・内容・速度・通知を一緒に設計します。

TL;DR

  1. 軽い検査から始め、重い検査は実行契機を選ぶ。
  2. 依存キャッシュとmatrixで待ち時間を縮める。
  3. 通知は対応すべき失敗に絞り、ノイズを増やさない。

01CIで守るものと、走らせるタイミング

すべてのpushに全検査を掛ける前に、失敗の影響と頻度を分ける。

CIで守るものと、走らせるタイミング
すべてのpushに全検査を掛ける前に、失敗の影響と頻度を分ける。

Lintや単体テストは早いフィードバック向き。脆弱性検査など重い処理は集約ブランチや定期実行に寄せると、コストと待ち時間を管理しやすい。

検査目的実行契機の目安
Lint規約・構文の早期検出PR / push
単体テスト振る舞いの検証PR / push
脆弱性検査依存・設定のリスク確認集約ブランチ / 定期実行

CIは「全部を毎回走らせる」より、異常を早く見つけて行動できる設計を優先する。

02cacheとmatrixは「速くする」ための二本柱

同じ準備を繰り返さず、独立した検査は同時に終わらせる。

cacheとmatrixは「速くする」ための二本柱
同じ準備を繰り返さず、独立した検査は同時に終わらせる。

依存関係の取得結果をキャッシュし、OS・言語バージョン・テスト対象など独立な組み合わせはmatrixで並列にする。失敗した組み合わせが分かるよう、単位は意味のある粒度に保つ。

手段短縮する時間設計の注意
cache依存関係の取得ロックファイルをキーにする
matrix独立したテストの待ち時間失敗の単位が追える粒度にする
対象絞り込み不要なジョブ変更範囲と検査を対応させる

cacheとmatrixは、ジョブが独立している範囲で使うと速さと原因特定を両立できる。

03通知は「誰が今動くか」を明確にする

PR上で見える結果までSlackへ流すと、重要な失敗が埋もれる。

通知は「誰が今動くか」を明確にする
PR上で見える結果までSlackへ流すと、重要な失敗が埋もれる。

featureブランチではPRチェックを基本にし、集約ブランチやデプロイの失敗など、即対応が必要なイベントを通知する。失敗時のリンク・対象・次の行動を一つにする。

イベント通知狙い
PRの通常失敗原則PR上で確認通知ノイズを増やさない
集約ブランチ失敗Slack等へ通知早く復旧に着手する
デプロイ失敗即時通知影響範囲を共有する

通知には失敗のURL・対象・次の担当を含め、受け手が迷わない状態にする。

結論

  1. CIは品質・待ち時間・コストのバランスで設計する。
  2. キャッシュと並列化は、独立性を壊さない範囲で使う。
  3. 通知は失敗を行動に変えるためにだけ使う。