DevOps & CI/CD 是一套用于构建自动化交付流水线的实践框架,目标是让团队更快、更有信心地发布。资料给出的是框架、示例与清单,具体工具选型与参数需按项目实际情况调整。
一、用途与适用时机 在以下场景中可参考本技能:为新项目搭建 CI/CD;改进已有部署流水线;对应用进行 Docker 容器化;实施基础设施即代码;为发布选择部署策略;建立监控与告警。
二、核心原则 自动化一切:同一件事做两次就写成脚本,脚本写两次就固化为流水线,减少人工干预。左移:测试、安全、质量尽早介入,在进入生产前发现问题。基础设施即代码:把基础设施纳入版本控制,像审查代码一样审查变更,保证环境可复现。
三、流水线阶段划分 资料将流水线拆为:COMMIT → BUILD → TEST → SECURITY → DEPLOY → MONITOR。
- COMMIT:代码推送到 GitHub、触发流水线、校验提交信息。
- BUILD:安装依赖、编译或打包、构建 Docker 镜像、缓存以加速。
- TEST:代码检查、类型检查、单元测试、集成测试、覆盖率检查。
- SECURITY:SAST 静态分析、依赖扫描、密钥检测、容器扫描。
- DEPLOY:部署到环境、执行迁移、健康检查、冒烟测试。
- MONITOR:性能指标、错误率、告警、必要时回滚。
四、GitHub Actions 示例要点 资料提供了一个包含多个 job 的完整示例,触发条件为 push 到 main/develop 分支及针对 main 的 PR。job 划分包括:build(检出代码、Setup Node.js 20 并启用 npm 缓存、npm ci 安装依赖、lint、typecheck、带覆盖率单元测试、build、上传覆盖率到 Codecov);security(使用 Snyk 检查漏洞、使用 TruffleHog 检测密钥);docker(依赖 build 与 security,仅在 push 到 main 时执行,设置 Docker Buildx、登录 Docker Hub、构建并推送镜像,标签含 sha 与 latest,并使用 registry 缓存);deploy-staging(依赖 docker,通过 SSH 拉取镜像并 docker-compose up -d,运行 E2E 测试与对 /health 的冒烟测试);deploy-production(依赖 deploy-staging,环境为 production,SSH 部署、健康检查、通过 Slack 通知)。
五、部署策略
- 蓝绿部署:维护两套相同环境,一套服务流量、一套空闲;把新版本部署到空闲环境并充分测试,再切换负载均衡器,切换回来即可瞬时回滚。资料给出 Kubernetes 的 green Deployment 与通过修改 Service selector 切换流量的示例。
- 金丝雀部署:先向小部分流量(如 5%)发布,观察问题后逐步提升(25%、50%、100%),出现问题时回滚。资料给出用两组 Service(stable 与 canary)加 Ingress 注解 canary-weight 实现按比例分流的示例。
- 滚动部署:以 Kubernetes Deployment 的 RollingUpdate 策略为例,通过 maxUnavailable 与 maxSurge 控制更新过程中不可用与额外 Pod 数量。
六、Docker 最佳实践 资料给出多阶段 Dockerfile 示例:构建阶段使用 node:20-alpine,先复制 package 文件以优化缓存,npm ci 安装全部依赖后构建;生产阶段仅安装生产依赖,从构建阶段复制产物,创建非 root 用户并切换,暴露 3000 端口,定义 HEALTHCHECK,并以 node dist/index.js 启动。另给出 docker-compose.yml 示例,包含 api(依赖 db 与 redis、带健康检查、通过环境变量注入配置)、db(postgres:15-alpine,含数据卷)、redis(redis:7-alpine,含数据卷)以及命名卷定义。
七、基础设施即代码 以 Terraform 为例,展示了 provider 与版本约束、VPC、ECS Cluster、RDS 数据库等资源定义,包含存储加密、备份保留策略随环境变化、安全组与子网组引用等配置方式。
八、监控与健康检查 健康端点示例给出 /health 返回状态、时间戳、版本与运行时长;/ready 就绪检查会依次检查数据库与缓存等关键依赖,失败时返回 503。关键指标采用黄金信号:延迟、流量、错误、饱和度。
九、检查清单 资料提供 DevOps 审查清单,涵盖 CI/CD(每个 PR 触发流水线、合并前测试通过、包含安全扫描、自动部署到 staging、生产需人工审批、具备回滚机制)、Docker(多阶段构建、非 root 用户、定义健康检查、密钥通过环境变量、镜像漏洞扫描)、基础设施(基础设施即代码、密钥安全托管、环境可复现、备份配置并验证、灾难恢复计划)、监控(健康端点、采集黄金信号、日志集中、配置告警、创建仪表盘)、安全(依赖自动扫描、密钥不入代码与日志、网络策略、最小权限、安全响应头)。
十、常见误区 资料以对照形式列出:手工部署应对应自动化 CI/CD;跳过测试应对应在部署前运行全部测试;使用 latest 标签应对应使用具体版本或 SHA;容器内以 root 运行应对应创建非 root 用户;把密钥提交到 git 应对应使用密钥管理;直接部署生产应对应先部署 staging;没有回滚方案应对应测试回滚流程;忽略健康检查失败应对应在不健康时让部署失败。
十一、涉及的工具 CI/CD:GitHub Actions、GitLab CI、CircleCI、Jenkins;容器:Docker、Kubernetes、Docker Compose、Podman;基础设施即代码:Terraform、AWS CloudFormation、Pulumi、Ansible;监控:Prometheus + Grafana、Datadog、New Relic、Sentry。资料还列出相关技能:/testing-strategies、/security-review、/performance-optimization。
十二、限制与未提供信息 本技能以实践指导与代码示例为主,资料未提供安装命令、版本要求、收费与价格、许可证、平台支持范围、具体效果数据或性能承诺,这些内容暂未提供。示例中的主机名、密钥变量名、镜像名与版本号均为占位示例,实际使用需替换为自身环境配置。