deployment-pipeline-design について
承認ゲート、デプロイ戦略、検証、ロールバックを含む多段階 CI/CD パイプラインの設計スキルです。環境をまたぐ安全なデプロイを計画するチーム向けです。
主な機能
- 01多段階パイプラインのパターン
- 02手動・時間指定の承認ゲート
- 03ローリング、ブルーグリーン、カナリアデプロイ
- 04フィーチャーフラグによるデプロイ
- 05検証とロールバックの指針
活用シーン
- 01複数環境にまたがる CI/CD の計画
- 02本番リリース前の承認手順の追加
- 03リリースに適したデプロイ戦略の選択
- 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│
└─────────┘ └──────┘ └─────────┘ └────────┘ └──────────┘
各ステージの詳細
- ソース - コードをチェックアウトします
- ビルド - コンパイル、パッケージ化、コンテナ化を行います
- テスト - 単体テスト、統合テスト、セキュリティスキャンを行います
- ステージングへのデプロイ - ステージング環境にデプロイします
- 統合テスト - E2E テスト、スモークテストを行います
- 承認ゲート - 手動での承認が必要です
- 本番環境へのデプロイ - カナリア、ブルーグリーン、ローリング方式でデプロイします
- 検証 - ヘルスチェックとモニタリングを行います
- ロールバック - 失敗時に自動でロールバックします
承認ゲートのパターン
パターン 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!"}'
パイプラインのベストプラクティス
- 迅速に失敗させる - まず時間のかからないテストを実行します
- 並列実行 - 独立したジョブを並行して実行します
- キャッシュ - 実行間で依存関係をキャッシュします
- アーティファクト管理 - ビルドアーティファクトを保存します
- 環境の同等性 - 環境間の一貫性を保ちます
- シークレット管理 - シークレットストア(Vault など)を使用します
- デプロイウィンドウ - 適切なタイミングでデプロイをスケジュールします
- モニタリングとの統合 - デプロイメントのメトリクスを追跡します
- ロールバックの自動化 - 失敗時に自動でロールバックします
- ドキュメント化 - パイプラインの各ステージを文書化します
ロールバック戦略
自動ロールバック
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- シークレットの取り扱い向け
コメント
Markdown 対応