平台工程视角下CICD服务目录环境部署 - 第2节
2. CI/CD 基础概念:持续集成、持续交付、持续部署的定义与区别
在平台工程视角下,CI/CD 是服务目录环境部署的核心自动化引擎。理解持续集成、持续交付、持续部署三者的定义与区别,是构建高效、可靠部署流水线的第一步。
2.1 核心定义
| 术语 | 英文 | 核心定义 | 关键动作 |
|---|---|---|---|
| 持续集成 | Continuous Integration (CI) | 开发人员频繁地将代码变更合并到主干分支,每次合并都通过自动化构建与测试来验证。 | 代码合并 → 自动构建 → 单元测试 → 代码扫描 |
| 持续交付 | Continuous Delivery (CD) | 在 CI 的基础上,确保每次变更都处于可部署到生产环境的就绪状态,但部署动作需要手动触发。 | CI 通过 → 自动部署到预发布环境 → 验收测试 → 手动生产部署 |
| 持续部署 | Continuous Deployment (CD) | 在持续交付的基础上,将通过所有自动化测试的变更自动部署到生产环境,无需人工干预。 | CI 通过 → 自动部署到预发布 → 自动部署到生产 |
平台工程提示: 在服务目录中,平台团队通常为不同风险等级的环境(开发、测试、预发布、生产)配置不同的 CD 策略。开发环境常用持续部署,生产环境则多采用持续交付 + 人工审批门禁。
2.2 三者的核心区别
三者的核心区别在于 自动化程度 和 人工干预点 的不同。下图直观展示了从代码提交到生产部署的完整链路与决策点。
关键区别速查表:
- CI 关注点: 代码质量与集成验证,失败则阻断后续流程。
- 持续交付关注点: 软件包的可发布性,生产部署保留人工审批。
- 持续部署关注点: 全自动化交付,从提交到上线零人工触碰。
2.3 CI/CD 流水线核心要素
一条成熟的 CI/CD 流水线由多个标准化阶段组成。平台工程团队需要将这些要素抽象为可复用的服务目录组件,供不同业务团队按需组装。
2.3.1 流水线阶段与要素
| 阶段 | 核心要素 | 平台工程关注点 |
|---|---|---|
| 1. 代码触发 | Git 事件(Push、PR、Tag)、Webhook、定时触发 | 统一 Webhook 网关,支持多 Git 平台(GitHub/GitLab/Bitbucket) |
| 2. 代码检出 | Git Clone、子模块拉取、LFS 文件获取 | 凭证管理、缓存策略、大文件处理 |
| 3. 构建 | 编译、打包(Docker Image / Jar / Zip)、依赖安装 | 构建环境标准化(容器化构建)、构建缓存加速 |
| 4. 静态分析 | 代码规范检查(Lint)、安全扫描(SAST)、依赖漏洞检查 | 集成统一扫描工具链,定义质量门禁阈值 |
| 5. 测试 | 单元测试、集成测试、端到端测试、性能测试 | 测试环境动态供给、测试数据管理、并行测试策略 |
| 6. 制品管理 | 制品上传(镜像仓库 / 二进制仓库)、版本标记、签名 | 统一制品仓库(Harbor / Nexus / Artifactory),不可变制品策略 |
| 7. 环境部署 | 基础设施即代码(IaC)执行、配置注入、服务发布 | 环境即服务(EaaS),通过服务目录声明式部署 |
| 8. 验证与审批 | 冒烟测试、健康检查、人工审批门禁 | 自动化验证 + 灵活审批策略(环境级别/角色级别) |
2.3.2 流水线核心要素架构图
下图展示了 CI/CD 流水线各要素之间的数据流与依赖关系,平台工程团队以此为基础构建服务目录中的“流水线模板”。
2.3.3 平台工程视角的关键实践
常见误区: 很多团队将 CI/CD 流水线视为一次性脚本,导致每个项目重复造轮子。平台工程要求将流水线要素 服务化、模板化、可观测化。
- 模板化: 将流水线阶段抽象为可配置的 YAML/JSON 模板,通过参数化实现多环境复用。
- 可观测性: 每个阶段输出结构化日志、指标(构建时长、测试通过率、部署频率)和链路追踪。
- 门禁策略: 质量门禁(代码覆盖率、安全漏洞等级)与环境门禁(生产环境需双人审批)分离配置。
- 不可变制品: 每个构建版本生成唯一不可变的制品标识,确保部署的可追溯性。
# 平台工程视角下的流水线模板示例(简化 YAML)
pipeline:
name: "service-catalog-deploy"
triggers:
- event: push
branches: ["main", "release/*"]
stages:
- stage: ci
steps:
- checkout
- build: docker build -t ${IMAGE_NAME}:${BUILD_ID}
- static_analysis: sonar-scanner
- test: mvn test
- stage: cd
steps:
- artifact_push: docker push ${REGISTRY}/${IMAGE_NAME}:${BUILD_ID}
- deploy_dev: terraform apply -auto-approve
- approval: # 仅生产环境需要
type: manual
roles: ["release-manager"]
- deploy_prod: helm upgrade --install ${RELEASE} ./chart
服务目录映射: 在平台工程中,上述流水线模板会被注册为“部署流水线”服务项。开发团队通过服务目录选择环境类型(开发/测试/预发布/生产),平台自动匹配对应的流水线模板和门禁策略。