平台工程视角下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/CD 核心流程与区别示意图 代码提交 Git Push 持续集成 CI 持续交付 CD 持续部署 CD 人工决策点 持续交付:手动触发生产部署 | 持续部署:全自动无人工干预 ✓
关键区别速查表:
  • 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 流水线各要素之间的数据流与依赖关系,平台工程团队以此为基础构建服务目录中的“流水线模板”。

CI/CD 流水线核心要素架构图 CI/CD 流水线核心要素架构 代码触发 Push / PR / Tag 代码检出 Git Clone + LFS 构建 编译 / Docker Build 静态分析 Lint / SAST / 依赖扫描 测试 单元 / 集成 / E2E 制品管理 上传 / 版本 / 签名 环境部署 IaC 执行 / 配置注入 / 发布 验证与审批 冒烟测试 / 健康检查 / 人工审批 平台工程将上述要素封装为“流水线模板”,通过服务目录对外提供标准化 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
服务目录映射: 在平台工程中,上述流水线模板会被注册为“部署流水线”服务项。开发团队通过服务目录选择环境类型(开发/测试/预发布/生产),平台自动匹配对应的流水线模板和门禁策略。