CI/CD Catalog 介绍

发布时间: 更新时间: 总字数:1188 阅读时间:3m 作者:IP:上海 网址

CI/CD Catalog(通常特指 GitLab CI/CD Catalog)是现代 CI/CD 平台中用于发现、重用和共享 CI/CD 流水线组件的集中式中心。

介绍

在 GitLab 生态中,CI/CD Catalog 于 2023 年底推出 Beta 版,并在 GitLab 17.0(2024 年 5 月)中正式 GA(普遍可用)。

  • 使用最新版本 ~latest,更多参考

核心概念

  • Component(组件):一个可重用的流水线配置单元(可以是一个 Job,也可以是多个相关联的 Jobs)。
  • Inputs(输入参数):组件定义时声明的参数,类似于函数的参数。调用方通过传入不同的值来改变组件的行为(如指定 Docker 镜像版本、部署环境路径等)。
  • Catalog Project(目录项目):一个专门用于托管组件的 Git 项目。一个项目最多可以包含数十个紧密相关的组件,并且有特定的目录结构规范(通常在 templates/ 目录下)。

如何使用 CI/CD Catalog 中的组件?

在应用项目中,只需要使用 include: component 语法即可引入别人写好的流水线模块。

示例:引入一个 Go 语言构建组件

yaml
include:
  # 语法格式:<平台域名>/<项目路径>/<组件名称>@<版本号>
  - component: gitlab.com/my-group/ci-components/golang-build@1.2.0
    inputs:
      stage: build # 将任务放入 build 阶段
      go_version: '1.21' # 覆盖组件的默认输入参数

# 你依然可以定义自己的 Job
deploy_job:
  stage: deploy
  script:
    - echo "Deploying application..."
  • 版本号 (@<version>) 的三种写法

GitLab 提供了灵活的版本控制策略,你可以根据不同环境的安全需求选择不同的写法:

写法示例 说明 适用场景
@1.0.0 固定特定版本(严格匹配 Tag)。不管组件作者怎么更新,你的流水线绝对不会因为上游变更而突然挂掉。 生产环境(强推)
@~latest 始终使用最新版本。GitLab 会自动解析 Catalog 中按 SemVer 排序的最新发布版本。 开发、测试环境,或内部强管控的公共组件
@main 使用分支名或 Commit SHA。这实际上跳过了 Catalog 的正式 Release,直接拉取该分支最新代码。 组件开发者在测试组件本身时使用

如何创建和发布自己的组件?

如果你是 DevOps 工程师,可以通过以下步骤为团队创建一套组件:

步骤一:建立规范的目录结构 在 GitLab 中创建一个新项目,按如下结构组织文件:

text
my-components/
├── templates/
│   └── build.yml      # 组件定义文件
├── README.md          # 必须的说明文档,会在 Catalog 界面展示
└── .gitlab-ci.yml     # 用于测试该组件并自动发布的自身流水线

编写带有 spec:inputs 的组件代码 (templates/build.yml)

yaml
spec:
  inputs:
    image:
      default: 'golang:latest' # 定义默认值
      description: '要使用的 Go 镜像版本'
---
# 组件具体逻辑
build_app:
  image: $[[ inputs.image ]] # 使用插值语法读取输入的参数
  script:
    - go build -o my_app ./...
  1. 在项目的 .gitlab-ci.yml 中添加如下发布配置:

    yaml
    stages:
      - release
    
    # 只有在打 Tag 时才会触发创建 Release
    create-release:
      stage: release
      image: registry.gitlab.com/gitlab-org/release-cli:latest
      rules:
        - if: $CI_COMMIT_TAG
      script:
        - echo "Creating release for $CI_COMMIT_TAG"
      release:
        tag_name: $CI_COMMIT_TAG
        description: 'Release $CI_COMMIT_TAG of components'

开启 CI/CD Catalog 开关

  1. 在 GitLab 中进入你的项目。
  2. 在左侧导航栏中,依次点击 Settings (设置) -> General (通用)。
  3. 找到并点击展开 Visibility, project features, permissions (可见性、项目功能、权限) 面板。
  4. 向下滚动,找到 CI/CD Catalog project 选项。
  5. 打开该开关(Toggle On) 并保存。

发布到 Catalog 在项目上打上 Git 语义化标签(如 1.0.0),GitLab 就会自动将其解析并在公共或私有的 Catalog 页面上架,供其他人搜索和阅读 README。

semantic version 版本号格式示例

必须是纯粹的数字加点(可以包含可选的预发布后缀),例如:

  • 1.0.0
  • 0.1.2
  • 2.1.0-beta.1
  • 3.0.0-rc

参考

  1. https://docs.gitlab.com/ci/components/#publish-a-new-release