mcpField
D
deployment-pipeline-design

deployment-pipeline-design

github.com/ovachieverクラウド・DevOps5643 回インストール48 週間前に更新
リポジトリ

deployment-pipeline-design について

承認ゲート、デプロイ戦略、検証、ロールバックを含む多段階 CI/CD パイプラインの設計スキルです。環境をまたぐ安全なデプロイを計画するチーム向けです。

主な機能

  1. 01多段階パイプラインのパターン
  2. 02手動・時間指定の承認ゲート
  3. 03ローリング、ブルーグリーン、カナリアデプロイ
  4. 04フィーチャーフラグによるデプロイ
  5. 05検証とロールバックの指針

活用シーン

  1. 01複数環境にまたがる CI/CD の計画
  2. 02本番リリース前の承認手順の追加
  3. 03リリースに適したデプロイ戦略の選択
  4. 04ロールバックとデプロイ後の確認項目の策定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/ovachiever/droid-tings --skill deployment-pipeline-design

インストール後、Claude Code で/deployment-pipeline-designを入力して読み込まれたか確認します。

詳細

デプロイメントパイプラインの設計

承認ゲートとデプロイ戦略を備えた、多段階 CI/CD パイプラインのアーキテクチャパターンです。

目的

適切なステージ構成と承認ワークフローを通じて、速度と安全性のバランスを取る、堅牢で安全なデプロイメントパイプラインを設計します。

使用する場面

  • CI/CD アーキテクチャを設計する
  • デプロイメントゲートを実装する
  • 複数環境にまたがるパイプラインを構成する
  • デプロイメントのベストプラクティスを確立する
  • 段階的なデリバリーを実装する

パイプラインのステージ

標準的なパイプラインのフロー
┌─────────┐   ┌──────┐   ┌─────────┐   ┌────────┐   ┌──────────┐
│  Build  │ → │ Test │ → │ Staging │ → │ Approve│ → │Production│
└─────────┘   └──────┘   └─────────┘   └────────┘   └──────────┘
各ステージの詳細
  1. ソース - コードをチェックアウトします
  2. ビルド - コンパイル、パッケージ化、コンテナ化を行います
  3. テスト - 単体テスト、統合テスト、セキュリティスキャンを行います
  4. ステージングへのデプロイ - ステージング環境にデプロイします
  5. 統合テスト - E2E テスト、スモークテストを行います
  6. 承認ゲート - 手動での承認が必要です
  7. 本番環境へのデプロイ - カナリア、ブルーグリーン、ローリング方式でデプロイします
  8. 検証 - ヘルスチェックとモニタリングを行います
  9. ロールバック - 失敗時に自動でロールバックします

承認ゲートのパターン

パターン 1:手動承認
# GitHub Actions
production-deploy:
  needs: staging-deploy
  environment:
    name: production
    url: https://app.example.com
  runs-on: ubuntu-latest
  steps:
    - name: Deploy to production
      run: |
        # Deployment commands
パターン 2:時間ベースの承認
# GitLab CI
deploy:production:
  stage: deploy
  script:
    - deploy.sh production
  environment:
    name: production
  when: delayed
  start_in: 30 minutes
  only:
    - main
パターン 3:複数承認者
# Azure Pipelines
stages:
- stage: Production
  dependsOn: Staging
  jobs:
  - deployment: Deploy
    environment:
      name: production
      resourceType: Kubernetes
    strategy:
      runOnce:
        preDeploy:
          steps:
          - task: ManualValidation@0
            inputs:
              notifyUsers: '[email protected]'
              instructions: 'Review staging metrics before approving'

参考: assets/approval-gate-template.yml を参照してください。

デプロイ戦略

1. ローリングデプロイ
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 10
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 2
      maxUnavailable: 1

特徴:

  • 段階的なリリース
  • ダウンタイムなし
  • 簡単にロールバック可能
  • ほとんどのアプリケーションに最適
2. ブルーグリーンデプロイ
# Blue (current)
kubectl apply -f blue-deployment.yaml
kubectl label service my-app version=blue

# Green (new)
kubectl apply -f green-deployment.yaml
# Test green environment
kubectl label service my-app version=green

# Rollback if needed
kubectl label service my-app version=blue

特徴:

  • 即時に切り替え可能
  • 簡単にロールバック可能
  • 一時的にインフラコストが倍増します
  • リスクの高いデプロイに適しています
3. カナリアデプロイ
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: my-app
spec:
  replicas: 10
  strategy:
    canary:
      steps:
      - setWeight: 10
      - pause: {duration: 5m}
      - setWeight: 25
      - pause: {duration: 5m}
      - setWeight: 50
      - pause: {duration: 5m}
      - setWeight: 100

特徴:

  • トラフィックを段階的に切り替えます
  • リスクを軽減します
  • 実ユーザーによるテストが可能です
  • サービスメッシュなどが必要です
4. フィーチャーフラグ
from flagsmith import Flagsmith

flagsmith = Flagsmith(environment_key="API_KEY")

if flagsmith.has_feature("new_checkout_flow"):
    # New code path
    process_checkout_v2()
else:
    # Existing code path
    process_checkout_v1()

特徴:

  • リリースせずにデプロイできます
  • A/B テストが可能です
  • 即時にロールバックできます
  • きめ細かく制御できます

パイプラインのオーケストレーション

多段階パイプラインの例
name: Production Pipeline

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Build application
        run: make build
      - name: Build Docker image
        run: docker build -t myapp:${{ github.sha }} .
      - name: Push to registry
        run: docker push myapp:${{ github.sha }}

  test:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Unit tests
        run: make test
      - name: Security scan
        run: trivy image myapp:${{ github.sha }}

  deploy-staging:
    needs: test
    runs-on: ubuntu-latest
    environment:
      name: staging
    steps:
      - name: Deploy to staging
        run: kubectl apply -f k8s/staging/

  integration-test:
    needs: deploy-staging
    runs-on: ubuntu-latest
    steps:
      - name: Run E2E tests
        run: npm run test:e2e

  deploy-production:
    needs: integration-test
    runs-on: ubuntu-latest
    environment:
      name: production
    steps:
      - name: Canary deployment
        run: |
          kubectl apply -f k8s/production/
          kubectl argo rollouts promote my-app

  verify:
    needs: deploy-production
    runs-on: ubuntu-latest
    steps:
      - name: Health check
        run: curl -f https://app.example.com/health
      - name: Notify team
        run: |
          curl -X POST ${{ secrets.SLACK_WEBHOOK }} \
            -d '{"text":"Production deployment successful!"}'

パイプラインのベストプラクティス

  1. 迅速に失敗させる - まず時間のかからないテストを実行します
  2. 並列実行 - 独立したジョブを並行して実行します
  3. キャッシュ - 実行間で依存関係をキャッシュします
  4. アーティファクト管理 - ビルドアーティファクトを保存します
  5. 環境の同等性 - 環境間の一貫性を保ちます
  6. シークレット管理 - シークレットストア(Vault など)を使用します
  7. デプロイウィンドウ - 適切なタイミングでデプロイをスケジュールします
  8. モニタリングとの統合 - デプロイメントのメトリクスを追跡します
  9. ロールバックの自動化 - 失敗時に自動でロールバックします
  10. ドキュメント化 - パイプラインの各ステージを文書化します

ロールバック戦略

自動ロールバック
deploy-and-verify:
  steps:
    - name: Deploy new version
      run: kubectl apply -f k8s/

    - name: Wait for rollout
      run: kubectl rollout status deployment/my-app

    - name: Health check
      id: health
      run: |
        for i in {1..10}; do
          if curl -sf https://app.example.com/health; then
            exit 0
          fi
          sleep 10
        done
        exit 1

    - name: Rollback on failure
      if: failure()
      run: kubectl rollout undo deployment/my-app
手動ロールバック
# List revision history
kubectl rollout history deployment/my-app

# Rollback to previous version
kubectl rollout undo deployment/my-app

# Rollback to specific revision
kubectl rollout undo deployment/my-app --to-revision=3

モニタリングとメトリクス

主要なパイプラインメトリクス
  • デプロイ頻度 - デプロイの実行頻度
  • リードタイム - コミットから本番環境への反映までの時間
  • 変更失敗率 - 失敗したデプロイの割合
  • 平均復旧時間(MTTR) - 失敗から復旧するまでの時間
  • パイプライン成功率 - 成功した実行の割合
  • 平均パイプライン実行時間 - パイプラインの完了にかかる時間
モニタリングとの統合
- name: Post-deployment verification
  run: |
    # Wait for metrics stabilization
    sleep 60

    # Check error rate
    ERROR_RATE=$(curl -s "$PROMETHEUS_URL/api/v1/query?query=rate(http_errors_total[5m])" | jq '.data.result[0].value[1]')

    if (( $(echo "$ERROR_RATE > 0.01" | bc -l) )); then
      echo "Error rate too high: $ERROR_RATE"
      exit 1
    fi

参考ファイル

  • references/pipeline-orchestration.md - 複雑なパイプラインのパターン
  • assets/approval-gate-template.yml - 承認ワークフローのテンプレート

関連スキル

  • github-actions-templates - GitHub Actions の実装向け
  • gitlab-ci-patterns - GitLab CI の実装向け
  • secrets-management - シークレットの取り扱い向け

コメント