mcpField

deployment-automation

github.com/eddiebe147クラウド・DevOps35 回インストール
リポジトリ

deployment-automation について

開発・ステージング・本番環境にまたがるデプロイ自動化を設計するスキルです。Kubernetes、インフラ構築、リリース方式、ロールバックの実践を扱います。

主な機能

  1. 01複数環境のデプロイパイプライン
  2. 02Kubernetesとインフラのデプロイ
  3. 03ブルーグリーンとカナリアリリース
  4. 04自動ロールバック手順
  5. 05デプロイの健全性確認と承認

活用シーン

  1. 01ステージングから本番への変更昇格
  2. 02カナリアまたはブルーグリーン切り替えの計画
  3. 03インフラ構築の自動化
  4. 04ロールバック計画とデプロイ確認の準備

インストール

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

$npx skills add https://github.com/eddiebe147/claude-settings --skill deployment-automation

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

詳細

デプロイの自動化

概要

手動作業とリスクを最小限に抑えながら、開発、ステージング、本番環境間でアプリケーションを安全かつ確実に移行する、自動デプロイパイプラインを構築します。

使用する場面

  • Kubernetes への継続的デプロイ
  • Infrastructure as Code によるデプロイ
  • 複数環境へのプロモーション
  • ブルーグリーンデプロイ戦略
  • カナリアリリースの管理
  • インフラストラクチャのプロビジョニング
  • ロールバック手順の自動化

実装例

1. Helm デプロイチャート
# helm/Chart.yaml
apiVersion: v2
name: myapp
description: My awesome application
type: application
version: 1.0.0

# helm/values.yaml
replicaCount: 3
image:
  repository: ghcr.io/myorg/myapp
  pullPolicy: IfNotPresent
  tag: "1.0.0"
service:
  type: ClusterIP
  port: 80
  targetPort: 3000
resources:
  requests:
    memory: "256Mi"
    cpu: "250m"
  limits:
    memory: "512Mi"
    cpu: "500m"
autoscaling:
  enabled: true
  minReplicas: 2
  maxReplicas: 10
2. GitHub Actions デプロイワークフロー
# .github/workflows/deploy.yml
name: Deploy

on:
  push:
    branches: [main]
  workflow_dispatch:
    inputs:
      environment:
        description: 'Environment to deploy to'
        required: true
        default: 'staging'
        type: choice
        options:
          - staging
          - production

env:
  REGISTRY: ghcr.io
  IMAGE_NAME: ${{ github.repository }}

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment:
      name: ${{ github.event.inputs.environment || 'staging' }}
    permissions:
      contents: read
      packages: read

    steps:
      - uses: actions/checkout@v3

      - name: Determine target environment
        id: env
        run: |
          if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then
            echo "environment=staging" >> $GITHUB_OUTPUT
          else
            echo "environment=staging" >> $GITHUB_OUTPUT
          fi

      - name: Setup kubectl
        uses: azure/setup-kubectl@v3
        with:
          version: 'latest'

      - name: Configure kubectl
        run: |
          mkdir -p $HOME/.kube
          echo "${{ secrets.KUBE_CONFIG }}" | base64 -d > $HOME/.kube/config
          chmod 600 $HOME/.kube/config

      - name: Deploy with Helm
        run: |
          helm repo add myrepo ${{ secrets.HELM_REPO_URL }}
          helm repo update

          helm upgrade --install myapp myrepo/myapp \
            --namespace ${{ steps.env.outputs.environment }} \
            --create-namespace \
            --values helm/values-${{ steps.env.outputs.environment }}.yaml \
            --set image.tag=${{ github.sha }} \
            --wait \
            --timeout 5m

      - name: Verify deployment
        run: |
          kubectl rollout status deployment/myapp \
            -n ${{ steps.env.outputs.environment }} \
            --timeout=5m
3. ArgoCD デプロイ
# argocd/myapp-app.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapp
  namespace: argocd
spec:
  project: default

  source:
    repoURL: https://github.com/myorg/helm-charts
    targetRevision: HEAD
    path: myapp
    helm:
      releaseName: myapp
      values: |
        image:
          tag: v1.0.0

  destination:
    server: https://kubernetes.default.svc
    namespace: production

  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true
    retry:
      limit: 5
      backoff:
        duration: 5s
        factor: 2
        maxDuration: 3m
5. ブルーグリーンデプロイ
#!/bin/bash
# Deploy green, run tests, switch traffic
helm upgrade --install myapp-green ./chart --set version=v2.0.0 --wait
kubectl run smoke-test --image=postman/newman --rm -- run tests/smoke.json

if [ $? -eq 0 ]; then
  kubectl patch service myapp -p '{"spec":{"selector":{"version":"v2.0.0"}}}'
  echo "✅ Traffic switched to green"
else
  helm uninstall myapp-green
  exit 1
fi

ベストプラクティス

✅ 推奨事項
  • Infrastructure as Code(Terraform、Helm)を使用する
  • GitOps ワークフローを導入する
  • ブルーグリーンデプロイを使用する
  • カナリアリリースを導入する
  • ロールバック手順を自動化する
  • まずステージング環境でデプロイをテストする
  • 段階的なロールアウトにはフィーチャーフラグを使用する
  • デプロイの健全性を監視する
  • デプロイ手順を文書化する
  • 本番環境に承認ゲートを導入する
  • インフラストラクチャコードをバージョン管理する
  • 環境間の同等性を確保する
❌ 禁止事項
  • 本番環境に直接デプロイする
  • ステージング環境でのテストを省略する
  • 手動のデプロイスクリプトを使用する
  • ロールバック計画なしでデプロイする
  • ヘルスチェックを無視する
  • 設定をハードコードする
  • 重要な時間帯にデプロイする
  • デプロイ前の検証を省略する
  • デプロイ前のバックアップを忘れる
  • ローカルマシンからデプロイする

デプロイチェックリスト

# Pre-deployment verification
- [ ] Run tests in staging
- [ ] Verify database migrations
- [ ] Check infrastructure capacity
- [ ] Review changelog
- [ ] Verify rollback plan
- [ ] Notify stakeholders
- [ ] Monitor error rates
- [ ] Prepare rollback script

リソース

コメント