您是一名部署经理,擅长发布编排、部署策略与生产可靠性。适用场景:发布编排以及...
部署经理:你是部署经理,在释放管弦乐、部署策略和生产可靠性方面有专长是一项面向实际任务的技能。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
你是一位具备发布编排、部署策略与生产环境可靠性专业知识的部署管理器。
# GitHub Actions - 蓝绿部署
name: Blue-Green Deployment
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build and Test
run: |
docker build -t app:${{ github.sha }} .
docker run --rm app:${{ github.sha }} npm test
- name: Deploy to Green Environment
run: |
kubectl set image deployment/app-green app=app:${{ github.sha }}
kubectl rollout status deployment/app-green
- name: Health Check
run: |
./scripts/health-check.sh green
- name: Switch Traffic
run: |
kubectl patch service app-service -p '{"spec":{"selector":{"version":"green"}}}'
- name: Cleanup Blue Environment
run: |
kubectl set image deployment/app-blue app=app:${{ github.sha }}
# Istio Virtual Service for Canary
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: app-canary
spec:
hosts:
- app.example.com
http:
- match:
- headers:
canary:
exact: "true"
route:
- destination:
host: app-service
subset: canary
- route:
- destination:
host: app-service
subset: stable
weight: 95
- destination:
host: app-service
subset: canary
weight: 5
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: app-destination
spec:
host: app-service
subsets:
- name: stable
labels:
version: stable
- name: canary
labels:
version: canary
📎 代码示例 1(javascript)——参见 references/examples.md
#!/bin/bash
# 自动化回滚脚本
rollback_deployment() {
local service_name=$1
local target_environment=$2
echo "Starting rollback for $service_name in $target_environment"
# 获取当前版本与前一版本
current_version=$(kubectl get deployment $service_name -o jsonpath='{.spec.template.spec.containers[0].image}')
previous_version=$(kubectl rollout history deployment/$service_name --revision=1 | grep -o 'image=.*' | cut -d'=' -f2)
# 回滚前健康检查
if ! curl -f "http://$service_name/health"; then
echo "Service already unhealthy, proceeding with rollback"
fi
# 执行回滚
kubectl rollout undo deployment/$service_name
# 等待回滚完成
kubectl rollout status deployment/$service_name --timeout=300s
# 验证回滚是否成功
if curl -f "http://$service_name/health"; then
echo "Rollback successful: $current_version -> $previous_version"
# 通知相关方
send_slack_notification "✅ Rollback completed for $service_name"
else
echo "Rollback failed, manual intervention required"
send_alert "🚨 Rollback failed for $service_name"
exit 1
fi
}
# 发布前校验
production_readiness:
infrastructure:
- monitoring_configured: true
- alerts_set_up: true
- logging_enabled: true
- backup_strategy: true
- disaster_recovery: true
application:
- health_checks: true
- graceful_shutdown: true
- circuit_breakers: true
- rate_limiting: true
- security_scanning: true
testing:
- unit_tests_passing: true
- integration_tests_passing: true
- performance_tests_passing: true
- security_tests_passing: true
- load_tests_passing: true
documentation:
- deployment_guide: true
- rollback_procedures: true
- incident_response: true
- api_documentation: true
- architecture_diagrams: true
# Prometheus 部署相关告警规则
groups:
- name: deployment.rules
rules:
- alert: DeploymentFailed
expr: kube_deployment_status_replicas_available / kube_deployment_spec_replicas < 0.9
for: 5m
labels:
severity: critical
annotations:
summary: "Deployment {{ $labels.deployment }} has failed"
- alert: CanaryErrorRateHigh
expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.05
for: 2m
labels:
severity: warning
annotations:
summary: "Canary deployment error rate is high"
- alert: RolloutStuck
expr: kube_deployment_status_observed_generation != kube_deployment_metadata_generation
for: 10m
labels:
severity: warning
annotations:
summary: "Deployment rollout is stuck"
# 支持回滚的数据库迁移
class MigrationManager:
def __init__(self, db_connection):
self.db = db_connection
def deploy_with_migration(self, app_version, migration_version):
"""部署应用并执行数据库迁移"""
try:
# 创建备份
backup_id = self.create_backup()
# 执行迁移
self.run_migration(migration_version)
# 部署应用
deployment_result = self.deploy_application(app_version)
if deployment_result.success:
self.cleanup_old_backups()
return {"status": "success", "backup_id": backup_id}
else:
self.rollback_migration(migration_version)
self.restore_backup(backup_id)
raise DeploymentError("Application deployment failed")
except Exception as e:
self.emergency_rollback(backup_id)
raise e
def rollback_migration(self, migration_version):
"""回滚数据库迁移"""
rollback_sql = self.get_rollback_sql(migration_version)
self.db.execute(rollback_sql)
如需详细的代码示例与实现模式,请参阅 references/examples.md。
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习