1. 服务目录概述
服务目录(Service Catalog)是平台工程中连接平台能力与开发者需求的“统一入口”。它并非简单的服务列表,而是一个经过抽象、标准化、可被程序化调用的能力注册与发现机制。在CI/CD流水线上下文中,服务目录决定了流水线能够“编排哪些基础设施”、“调用哪些中间件”、“遵循哪些治理策略”。
1.1 服务目录在平台工程中的定义
服务目录将平台团队提供的所有可复用能力(计算、存储、网络、中间件、安全策略、部署模板等)封装为“服务项”,每个服务项包含明确的接口契约、配置参数、依赖关系和生命周期管理规则。开发者无需理解底层实现细节,只需通过声明式调用即可获得所需能力。
| 维度 | 传统运维视角 | 平台工程服务目录视角 |
|---|---|---|
| 能力暴露方式 | 文档、工单、手动审批 | API、CLI、GitOps声明式 |
| 消费者 | 运维工程师 | 应用开发者、CI/CD流水线 |
| 变更粒度 | 环境级、主机级 | 服务项级、参数级 |
| 治理策略 | 事后审计 | 事前策略即代码(Policy as Code) |
| 版本管理 | 无或松散 | 语义化版本、兼容性矩阵 |
1.2 核心价值
服务目录为平台工程带来四个关键价值,这些价值直接决定了CI/CD流水线的效率与质量:
- 标准化:消除“每个团队一套部署脚本”的碎片化现象,所有服务项遵循统一接口规范,降低流水线适配成本。
- 可发现性:开发者或流水线引擎可以通过API动态查询可用服务、版本、配额和约束,无需翻阅静态文档。
- 治理内建:成本配额、安全基线、合规规则直接绑定在服务项定义中,流水线调用时自动执行策略校验,避免违规资源创建。
- 自助服务:开发者通过声明式配置(如YAML)即可在流水线中完成环境创建、中间件申请、配置注入等操作,减少等待平台团队介入的时间。
关键指标:实施服务目录后,典型组织的环境准备时间从2-3天缩短至15-30分钟,流水线因基础设施等待导致的阻塞减少70%以上。
1.3 与CI/CD流水线的关联
服务目录与CI/CD流水线的关联体现在三个核心交互阶段:
- 流水线初始化阶段:流水线启动时,通过服务目录API查询当前项目可用的构建环境、测试集群、部署目标等资源列表,动态生成流水线执行计划。
- 任务执行阶段:每个流水线步骤(如编译、单元测试、集成测试、安全扫描、部署)通过服务目录获取具体的执行环境参数、中间件连接信息和配置模板。
- 资源回收阶段:流水线结束后,通过服务目录触发临时资源的自动回收或状态更新,确保资源生命周期与流水线执行周期一致。
1.4 服务目录的典型数据模型
一个标准化的服务项通常包含以下核心字段,这些字段直接决定了CI/CD流水线如何解析和调用该服务:
| 字段 | 类型 | 说明 | 流水线使用场景 |
|---|---|---|---|
serviceId |
string | 全局唯一标识 | 流水线声明式配置中引用 |
name |
string | 服务名称 | 日志输出、可视化展示 |
version |
semver | 语义化版本号 | 流水线选择兼容版本 |
endpoints |
array | API端点列表 | 流水线步骤调用目标 |
parameters |
object | 输入参数Schema | 流水线参数校验 |
policies |
array | 绑定的治理策略 | 流水线执行前策略检查 |
costModel |
object | 计费/配额模型 | 流水线成本预估 |
lifecycle |
object | 创建/更新/删除操作定义 | 流水线资源编排 |
实践建议:在服务目录设计初期,优先定义
parameters 和 policies 两个字段的Schema。它们是流水线实现“参数化构建”和“策略即代码”的基础,也是后续接口调用机制中最核心的数据契约。
1.5 服务目录的注册与发现流程
服务目录的生命周期管理包含两个关键流程:服务提供方(平台团队)的注册流程,以及服务消费方(CI/CD流水线)的发现流程。下图展示了这两个流程的协作关系:
常见误区:不要将服务目录设计为“静态配置文件”或“文档中心”。服务目录必须提供实时API供流水线动态查询,否则在环境频繁创建和销毁的场景下,流水线会因缓存的服务信息过时而失败。推荐使用gRPC或RESTful API,并配合etcd或Consul实现服务状态实时同步。