设计包含审批门控、安全检查与部署编排的多阶段CI/CD流水线。在设计零停机部署流水线、实施金丝雀发布策略、设置多环境晋升工作流或调试CI/CD中失败的部署门控时使用此技能。
部署流水线设计
多阶段CI/CD流水线的架构模式,包含审批门控、部署策略和环境晋升工作流。
目的
设计稳健、安全的部署流水线,通过合理的阶段组织、自动化质量门控和渐进式交付策略,在速度与安全性之间取得平衡。本技能涵盖流水线架构的结构性设计以及可靠生产部署的操作模式。
输入/输出
您提供的内容
- 应用类型:语言/运行时、容器化或裸机、单体或微服务
- 部署目标:Kubernetes、ECS、虚拟机、Serverless或平台即服务
- 环境拓扑:环境数量(开发/预发布/生产)、区域布局、物理隔离要求
- 发布要求:可接受的停机时间、回滚SLA、流量拆分需求、金丝雀与蓝绿部署偏好
- 门控约束:审批团队、所需测试覆盖率阈值、合规扫描(SAST、DAST、SCA)
- 监控栈:用于自动晋升决策的Prometheus、Datadog、CloudWatch或其他指标源
此技能产出的内容
- 流水线配置:阶段定义、作业依赖、并行性和缓存策略
- 部署策略:选择的发布模式及带注释的配置(金丝雀权重、蓝绿切换、滚动参数)
- 健康检查设置:浅层与深层就绪探针、部署后冒烟测试脚本
- 门控定义:自动化指标阈值和手动审批工作流
- 回滚计划:自动化回滚触发器和手动操作手册步骤
使用时机
- 为新服务或平台迁移设计CI/CD架构
- 在环境之间实施部署门控
- 配置包含强制性安全扫描的多环境流水线
- 使用金丝雀或蓝绿策略建立渐进式交付
- 调试流水线中阶段成功但生产行为异常的问题
- 通过指标退化时自动回滚来减少平均恢复时间
详细模式与实例
详细的模式文档位于 references/details.md。当上述导航层级不足时,请阅读该文件。
故障排除
流水线中健康检查通过,但生产环境服务不健康
流水线健康检查命中了一个浅层 /ping 端点,即使数据库不可达也返回200。请使用验证实际依赖的深层就绪检查(参见上方健康检查部分)。
金丝雀部署从未晋升到100%
Argo Rollouts 需要有效的 AnalysisTemplate 才能自动晋升。如果Prometheus查询返回无数据(例如指标名称更改),分析将保持不确定状态,晋升停滞。添加 inconclusiveLimit 以使发布快速失败而非挂起:
spec:
metrics:
- name: error-rate
failureCondition: "result[0] > 0.05"
inconclusiveLimit: 2 # 2次不确定结果后失败,而非无限挂起
provider:
prometheus:
query: |
sum(rate(http_requests_total{status=~"5.."}[2m]))
/ sum(rate(http_requests_total[2m]))
预发布部署成功,但生产作业从未启动
检查生产环境保护规则是否已配置——缺少审阅者分配意味着审批门控无限等待且无通知。在GitHub Actions中,确保在 Settings → Environments → production 中将 Required reviewers 设置为现有用户或团队。
Docker层缓存每次构建都被破坏,导致构建缓慢
如果 COPY . . 出现在依赖安装之前,任何源文件更改都会使依赖层失效。重新排序,先复制依赖清单:
# 好:依赖与源代码分开缓存
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
回滚导致数据库迁移应用于旧代码
服务回滚而未回滚迁移会导致模式/代码不匹配错误。始终使迁移向后兼容(仅添加)至少一个发布周期,并将撤销脚本与迁移一起版本化:
# migrations/V20240315__add_nullable_column.sql (正向)
# migrations/V20240315__add_nullable_column.undo.sql (反向)
在旧代码版本从所有环境中完全退役之前,切勿运行破坏性迁移(DROP COLUMN、ALTER NOT NULL)。
高级主题
有关特定平台的流水线配置、多区域晋升工作流和高级Argo Rollouts模式,请参见:
references/advanced-strategies.md— 扩展的YAML示例、特定平台配置(GitHub Actions、GitLab CI、Azure Pipelines)、多区域金丝雀模式以及数据库迁移回滚策略
相关技能
github-actions-templates- 用于GitHub Actions实现模式和可重用工作流gitlab-ci-patterns- 用于GitLab CI/CD流水线实现secrets-management- 用于CI/CD流水线中的密钥处理






