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流水线的关联体现在三个核心交互阶段:

  1. 流水线初始化阶段:流水线启动时,通过服务目录API查询当前项目可用的构建环境、测试集群、部署目标等资源列表,动态生成流水线执行计划。
  2. 任务执行阶段:每个流水线步骤(如编译、单元测试、集成测试、安全扫描、部署)通过服务目录获取具体的执行环境参数、中间件连接信息和配置模板。
  3. 资源回收阶段:流水线结束后,通过服务目录触发临时资源的自动回收或状态更新,确保资源生命周期与流水线执行周期一致。
服务目录与CI/CD流水线交互关系 服务目录 API / 声明式接口 初始化阶段 查询可用资源 执行阶段 获取环境/配置 回收阶段 释放/更新资源 动态执行计划 资源清单 运行时上下文 连接信息/密钥 资源状态报告 成本/合规记录 说明:流水线三个阶段通过服务目录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流水线)的发现流程。下图展示了这两个流程的协作关系:

服务目录注册与发现流程 服务注册流程(平台团队) 1. 定义服务Schema 2. 绑定治理策略 3. 发布到服务目录 4. 版本化与变更审计 服务发现流程(CI/CD流水线) 1. 查询可用服务列表 2. 获取服务详情与Schema 3. 校验参数与策略 4. 发起服务调用 同步 同步 注册与发现流程通过服务目录API实现解耦,平台团队无需关注流水线内部实现 流水线也无需了解服务背后的基础设施细节,只需遵循接口契约
常见误区:不要将服务目录设计为“静态配置文件”或“文档中心”。服务目录必须提供实时API供流水线动态查询,否则在环境频繁创建和销毁的场景下,流水线会因缓存的服务信息过时而失败。推荐使用gRPC或RESTful API,并配合etcd或Consul实现服务状态实时同步。