CI/CD Pipeline

ビルド、テスト、デプロイの自動化フロー

パイプラインの基本ステージ

Source
Build
Test
Stage
Deploy

GitHub Actions 例

1name: CI/CD Pipeline
2
3on:
4 push:
5 branches: [main]
6 pull_request:
7 branches: [main]
8
9jobs:
10 build:
11 runs-on: ubuntu-latest
12 steps:
13 - uses: actions/checkout@v4
14
15 - name: Setup Node.js
16 uses: actions/setup-node@v4
17 with:
18 node-version: '20'
19 cache: 'npm'
20
21 - name: Install dependencies
22 run: npm ci
23
24 - name: Run tests
25 run: npm test
26
27 - name: Build
28 run: npm run build
29
30 deploy:
31 needs: build
32 runs-on: ubuntu-latest
33 if: github.ref == 'refs/heads/main'
34 steps:
35 - name: Deploy to production
36 run: echo "Deploying..."

テストの種類

ユニットテスト

個々の関数やモジュールをテスト。高速、多数実行

インテグレーションテスト

複数コンポーネントの連携をテスト

E2Eテスト

ユーザー操作をシミュレート。実際のブラウザで実行

静的解析

コードを実行せずに問題を検出(ESLint、SonarQube)

デプロイ戦略

ローリングデプロイ

インスタンスを順次更新。ダウンタイムなし。新旧バージョンが一時共存。

Blue/Green デプロイ

新環境(Green)を準備し、切り替え。即座にロールバック可能。コスト2倍。

カナリアデプロイ

一部のトラフィックを新バージョンに流す。問題あれば影響を限定。

Feature Flags

コードはデプロイ済みだが、フラグで機能を制御。段階的ロールアウト。

ベストプラクティス

  • 高速フィードバック

    テストは10分以内を目指す。遅いテストは並列化

  • trunk-based開発

    短命なブランチ、頻繁なマージでコンフリクト削減

  • 不変のアーティファクト

    一度ビルドしたものを各環境にデプロイ

  • シークレット管理

    ハードコードしない。Vault、AWS Secrets Managerを使用

  • 再現可能なビルド

    同じコミットから同じアーティファクトが生成される

DORA メトリクス

DevOps Research and Assessment による4つの主要メトリクス

デプロイ頻度

本番へのデプロイ回数

リードタイム

コミットからデプロイまでの時間

変更失敗率

障害を引き起こしたデプロイの割合

復旧時間

障害から復旧までの時間