logo
0
0
WeChat Login
更新变量占位符语法为@{}格式

CNB Auto Docker Tag Plugin

CNB 自动 Docker 标签插件,自动管理 Docker 镜像的 tag 版本号。

功能特性

  • 自动获取 Docker 镜像的所有 tags,按版本号排序
  • 智能版本号递增(支持自定义规则)
  • 支持多种 tag 格式模板
  • 输出流水线变量供后续步骤使用

Tag 格式支持

插件支持以下 tag 格式模板:

1. 语义化版本格式

tagFormat: "v@{version}"

生成示例:v1.0.1v1.0.2v1.1.0

版本递增规则:

  • 若镜像无 tag,则生成初始版本 v1.0.1
  • 否则,取最新 tag(按语义化版本排序),递增规则:
    • 补丁号(patch)增加 1
    • 若 patch 达到 100,则进位到次版本号(minor)并重置 patch 为 0
    • 若 minor 达到 100,则进位到主版本号(major)并重置 minor、patch 为 0

示例:

  • v1.0.1v1.0.2
  • v1.0.99v1.1.0
  • v1.99.99v2.0.0

2. 自增版本格式

tagFormat: "v@{auto}"

生成示例:v1v2v3

版本递增规则:

  • 若镜像无 tag,则生成初始版本 v1
  • 否则,取最新 tag 的数字并加 1

3. 带日期的版本格式

tagFormat: "@{yyyyMMdd}-v@{version}"

生成示例:20260325-v1.0.1

tagFormat: "@{yyyyMMdd}-v@{auto}"

生成示例:20260325-v1

日期处理规则:

  • @{yyyyMMdd} 会被替换为当前日期(如 20260325)
  • 优先选择当天的最新版本进行递增
  • 如果当天没有版本,则创建新的版本

使用方法

.cnb.yml 流水线配置中使用:

stages: - name: auto-docker-tag image: docker.cnb.cool/r_r/auto-docker-tag:latest settings: tagFormat: "v@{version}"

参数配置

slug

  • 类型: string
  • 默认值: 当前仓库路径(环境变量 CNB_REPO_SLUG_LOWERCASE
  • 必填: 是
  • 说明: 仓库路径。非跨仓无需传入,如需跨仓库操作可使用此参数指定。

示例:

stages: - name: auto-docker-tag image: docker.cnb.cool/r_r/auto-docker-tag:latest settings: slug: "other-owner/other-repo"

type

  • 类型: string
  • 默认值: docker
  • 必填: 是
  • 说明: 包类型。目前仅支持 docker

imageName

  • 类型: string
  • 默认值: (环境变量 CNB_REPO_SLUG_LOWERCASE),取最后一个 / 后面的值(同名镜像)
  • 必填: 是
  • 说明: Docker 镜像名称,可单独指定。

示例:

stages: - name: auto-docker-tag image: docker.cnb.cool/r_r/auto-docker-tag:latest settings: imageName: "my-custom-image"

tagFormat

  • 类型: string
  • 默认值: v@{version}
  • 必填: 否
  • 说明: 指定 tag 格式,支持 @{version}@{auto}@{yyyyMMdd}@{yyyyMMdd}-v@{auto} 占位符。

示例:

stages: - name: auto-docker-tag image: docker.cnb.cool/r_r/auto-docker-tag:latest settings: tagFormat: "@{yyyyMMdd}-v@{version}"

endpoint

  • 类型: string
  • 默认值: 当前平台的 OPENAPI 地址(环境变量 CNB_API_ENDPOINT
  • 必填: 否
  • 说明: 平台 API 地址。非跨平台无需传入,如需跨平台操作可使用此参数指定,如 https://api.cnb.cool

token

  • 类型: string
  • 默认值: 当前用户的临时票据(环境变量 CNB_TOKEN
  • 必填: 否
  • 说明: 平台 token。如需跨平台创建,可传入该参数。访问令牌需包含以下权限:registry-package:r

输出变量

插件会输出以下流水线变量:

##[set-output auto-docker-tag=v1.0.1] ##[set-output auto-docker-tag-url=docker.cnb.cool/h_h/images/aws-freetier-monitor:v1.0.1]

完整示例

基本使用

main: push: - stages: - name: auto-docker-tag image: docker.cnb.cool/r_r/auto-docker-tag:latest settings: slug: "other-owner/other-repo" imageName: "my-image" tagFormat: "v@{version}" exports: auto-docker-tag: DOCKER_TAG auto-docker-tag-url: DOCKER_TAG_URL - name: echo env script: - echo "DOCKER_TAG $DOCKER_TAG" - echo "DOCKER_TAG_URL $DOCKER_TAG_URL"

使用日期格式

main: push: - stages: - name: auto-docker-tag image: docker.cnb.cool/r_r/auto-docker-tag:latest settings: tagFormat: "@{yyyyMMdd}-v@{auto}"

跨仓库操作

main: push: - stages: - name: auto-docker-tag-other-repo image: docker.cnb.cool/r_r/auto-docker-tag:latest settings: slug: "other-owner/other-repo" imageName: "my-image" endpoint: "https://api.cnb.cool" token: "${OTHER_REPO_TOKEN}"

错误处理

遇到以下情况时,插件会退出并返回非零状态码,导致流水线失败:

  • 参数缺失(token、endpoint、slug、imageName、type)
  • API 调用失败
  • 镜像不存在

许可证

MIT License