部署自动化Skill deployment-automation

自动化部署管道,安全、可靠地跨环境部署应用程序,支持蓝绿部署、金丝雀发布和自动化回滚。

CI/CD 0 次安装 0 次浏览 更新于 3/3/2026

deployment-automation 部署自动化

概述 建立自动化部署管道,安全、可靠地将应用程序跨开发、测试和生产环境移动,最小化手动干预和风险。

何时使用

  • 持续部署到Kubernetes
  • 基础设施即代码部署
  • 多环境推广
  • 蓝绿部署策略
  • 金丝雀发布管理
  • 基础设施供应
  • 自动化回滚程序

实施示例

  1. Helm部署图表
# helm/Chart.yaml
apiVersion: v2
name: myapp
description: 我的应用
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
  1. GitHub Actions部署工作流
# .github/workflows/deploy.yml
name: 部署

on:
  push:
    branches: [main]
  workflow_dispatch:
    inputs:
      environment:
        description: '部署到的环境'
        required: true
        default: '测试'
        type: choice
        options:
          - 测试
          - 生产

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

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

    steps:
      - uses: actions/checkout@v3

      - name: 确定目标环境
        id: env
        run: |
          if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then
            echo "environment=测试" >> $GITHUB_OUTPUT
          else
            echo "environment=测试" >> $GITHUB_OUTPUT
          fi

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

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

      - name: 使用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: 验证部署
        run: |
          kubectl rollout status deployment/myapp \
            -n ${{ steps.env.outputs.environment }} \
            --timeout=5m
  1. 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
  1. 蓝绿部署
#!/bin/bash
# 部署绿色版本,运行测试,切换流量
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 "✅ 流量切换到绿色版本"
else
  helm uninstall myapp-green
  exit 1
fi

最佳实践

✅ DO

  • 使用基础设施即代码(Terraform, Helm)
  • 实施GitOps工作流
  • 使用蓝绿部署
  • 实施金丝雀发布
  • 自动化回滚程序
  • 在测试环境中首先测试部署
  • 使用功能标志进行逐步推出
  • 监控部署健康
  • 文档化部署程序
  • 实施生产批准门
  • 版本基础设施代码
  • 使用环境一致性

❌ DON’T

  • 直接部署到生产
  • 跳过测试环境中的测试
  • 使用手动部署脚本
  • 部署没有回滚计划
  • 忽略健康检查
  • 使用硬编码配置
  • 在关键小时部署
  • 跳过部署前验证
  • 忘记在部署前备份
  • 从本地机器部署

部署清单

# 部署前验证
- [ ] 在测试中运行测试
- [ ] 验证数据库迁移
- [ ] 检查基础设施容量
- [ ] 查看变更日志
- [ ] 验证回滚计划
- [ ] 通知利益相关者
- [ ] 监控错误率
- [ ] 准备回滚脚本

资源