CI/CD
CI/CD 将代码验证、制品构建和环境部署组成可追溯的自动化流水线。
CI、Delivery、Deployment
- Continuous Integration:频繁合并代码,并快速执行静态检查、测试和构建。
- Continuous Delivery:主干始终处于可发布状态,生产部署可以包含人工审批。
- Continuous Deployment:通过全部门禁的变更自动部署到生产。
流水线设计
触发 → 安装依赖 → Lint/测试 → 构建 → SBOM/扫描 → 发布制品 → 部署 → 冒烟测试 → 观测/回滚
各 Job 应声明输入、输出、权限、超时和重试边界。缓存用于提速,Artifact 用于在 Job 或环境之间传递不可变结果,两者不能混用。
触发与并发
- Pull Request 流水线执行快速检查,不使用生产 Secret。
- 主干流水线生成可发布制品;Tag 或审批触发正式发布。
- 为同一分支设置并发组,取消已被新提交取代的旧任务。
- 定时任务用于依赖扫描、证书检查等非提交触发工作。
Job 边界
- 将 Lint、单元测试、构建和安全扫描拆成可并行且可独立重试的 Job。
- 固定运行器、包管理器和运行时版本;校验锁文件。
- 缓存 Key 应包含锁文件摘要,缓存未命中不能影响正确性。
- 制品包含版本与校验和,并设置合理保留期。
门禁与部署
- 保护生产环境,限制可审批者和可用 Secret。
- 部署前验证制品签名、扫描结果和来源。
- 部署任务只负责部署既有制品,不再次编译。
- 部署后执行健康检查和烟雾测试,失败时停止推广并按策略回滚。
安全默认值
- Job 权限默认只读,按需授予上传制品或部署权限。
- 优先使用 OIDC 短期凭据,避免长期云密钥。
- 第三方 Action、镜像和模板固定到可信版本或摘要。
- 对 Fork PR 和不受信任输入禁用高权限任务。
失败处理
区分可重试的网络故障、确定性的测试失败和部署后的生产故障。不要用无限重试掩盖不稳定测试;生产失败需要保留部署、日志、指标和制品证据。