2. CI/CD 服务目录概念

2.1 服务目录的定义

在平台工程的语境下,CI/CD 服务目录是一个经过抽象和标准化的、可被开发者按需发现与使用的持续集成与持续交付能力清单。它并非简单的工具列表,而是一个将底层 CI/CD 基础设施(如 Jenkins、GitLab CI、ArgoCD、Spinnaker)封装为“服务产品”的治理层。

每个服务目录条目通常包含以下核心属性:

属性维度 说明 示例
服务名称 面向开发者的可读标识 “Java 微服务构建流水线”
服务描述 功能与适用场景说明 “适用于 Spring Boot 项目的 Maven 构建 + 单元测试 + 镜像打包”
输入参数 开发者需要提供的配置项 Git 仓库地址、分支名、JVM 参数
输出产物 服务执行后的交付物 Docker 镜像、Helm Chart、测试报告
SLA / 配额 性能承诺与资源限制 平均构建时长 ≤ 5 分钟,并发数 ≤ 10
权限策略 谁可以申请、查看、修改 仅项目 Owner 可修改流水线定义
关键认知: 服务目录的本质是“能力抽象层”。它将底层 CI/CD 工具的复杂性(如 Jenkinsfile 语法、ArgoCD Application 定义)隐藏,对外暴露统一的、符合组织治理规范的接口。

2.2 服务目录在平台工程中的角色

在平台工程的金字塔模型中,服务目录位于开发者体验层与基础设施编排层之间,扮演着“中间治理层”的角色。其核心职责包括:

  • 标准化入口: 强制团队使用经过审批的流水线模板,消除“一人一种写法”的碎片化问题。
  • 治理边界: 在服务目录中定义安全扫描、制品签名、环境审批等强制性步骤,确保合规性。
  • 成本与资源管控: 通过目录条目关联配额(Quota)和预算(Budget),防止 CI/CD 资源被滥用。
  • 可观测性聚合: 每个服务目录条目自动关联监控仪表盘,平台团队可以统一查看所有流水线的健康状态。
服务目录在平台工程中的位置 开发者体验层(自助服务门户) CI/CD 服务目录(治理层) 标准化模板 | 权限策略 | 配额管控 | 合规检查 基础设施编排层(CI/CD 工具链) Jenkins | GitLab CI | ArgoCD | Spinnaker | Tekton 平台工程核心价值: 服务目录将底层工具链的差异(声明式 vs 命令式、不同 CI 语法)抽象为统一的服务接口, 开发者无需关心“用什么工具”,只需关注“我要什么能力”。

2.3 服务目录与自助服务的关系

自助服务是平台工程面向开发者的“前台”,而服务目录是支撑这个前台的“货架”。两者之间的关系可以概括为:自助服务是交互界面,服务目录是能力仓库。

具体表现为以下三个层次:

  1. 发现(Discovery): 开发者通过自助服务门户浏览服务目录,查看可用的 CI/CD 能力、文档、SLA 和输入输出。
  2. 请求(Request): 开发者选择目录条目,填写参数(如 Git 仓库、环境标签),提交创建请求。自助服务门户将请求转发给服务目录引擎。
  3. 交付(Delivery): 服务目录引擎根据条目定义,调用底层 CI/CD 工具链自动创建流水线、配置权限、分配资源,并将结果(如流水线 URL、凭证)返回给开发者。
实践案例: 某金融科技公司在其内部开发者平台中,将“生产环境部署流水线”作为一个服务目录条目。开发者通过自助门户申请时,必须选择“合规审批流”(如需要安全团队和架构师审批)。服务目录自动生成 ArgoCD Application 并绑定审批策略,整个过程无需平台团队手动介入。
服务目录与自助服务的交互流程 开发者 自助服务门户 服务目录引擎 CI/CD 工具链 ① 浏览目录 ② 提交请求(含参数) ③ 调用工具链 ④ 返回流水线信息 ⑤ 展示结果 关键原则: 开发者只与自助服务门户交互,服务目录引擎负责将请求翻译为底层工具链的 API 调用,实现“请求即交付”。

2.4 服务目录的典型分类

根据 CI/CD 流程的不同阶段,服务目录通常可以分为以下几类:

分类 典型条目 权限关注点
构建服务 Java Maven 构建、Node.js npm 构建、Golang 交叉编译 构建环境隔离、依赖缓存访问权限
镜像服务 Docker 镜像构建与推送、Kaniko 无特权构建 镜像仓库写入权限、镜像签名密钥访问
部署服务 Kubernetes 滚动部署、蓝绿部署、金丝雀发布 目标集群 RBAC、审批流程绑定
安全服务 SAST 静态扫描、SCA 依赖扫描、容器镜像漏洞扫描 扫描结果读取范围、阻断策略配置权限
环境服务 临时测试环境创建、数据库 Schema 迁移 环境生命周期管理、资源配额
常见误区: 不要将服务目录设计为“所有工具的大杂烩”。每个目录条目都应该有明确的输入、输出和治理策略。条目过多且缺乏标准化,会导致开发者选择困难,反而降低自助服务的效率。