CI/CD Pipeline
ビルド、テスト、デプロイの自動化フロー
パイプラインの基本ステージ
Source
→Build
→Test
→Stage
→Deploy
GitHub Actions 例
1 name: CI/CD Pipeline 2 3 on: 4 push: 5 branches: [main] 6 pull_request: 7 branches: [main] 8 9 jobs: 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つの主要メトリクス
デプロイ頻度
本番へのデプロイ回数
リードタイム
コミットからデプロイまでの時間
変更失敗率
障害を引き起こしたデプロイの割合
復旧時間
障害から復旧までの時間