deployment-pipeline-design

deployment-pipeline-design

热门

设计包含审批门控、安全检查与部署编排的多阶段CI/CD流水线。在设计零停机部署流水线、实施金丝雀发布策略、设置多环境晋升工作流或调试CI/CD中失败的部署门控时使用此技能。

3.8万Star
4097Fork
更新于 2026/7/22
SKILL.md
readonly只读
name
deployment-pipeline-design
description

设计包含审批门控、安全检查与部署编排的多阶段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流水线中的密钥处理