如何为GHCR容器添加自动递增的Semver版本标签?
解决GHCR容器自动递增Semver标签问题
问题分析
你的当前配置存在两个核心问题:
docker/metadata-action未配置自定义标签模板,默认仅生成带SHA或原v前缀的标签,不符合你需要的纯Semver格式- 工作流仅在推送
v*标签时触发,无法实现主分支推送时自动递增版本号,且latest标签因触发条件限制无法生成
方案1:手动打Semver标签时生成规范容器标签
如果你习惯手动创建v1.0.0这类标签,修改Extract metadata步骤,添加Semver标签模板和latest标签规则:
- name: Extract metadata id: meta uses: docker/metadata-action@v3 with: images: ghcr.io/skysourced/findtheducks tags: | # 生成纯Semver标签(如1.0.0) type=semver,pattern={{version}} # 生成主版本.次版本标签(如1.0) type=semver,pattern={{major}}.{{minor}} # 生成主版本标签(如1) type=semver,pattern={{major}} # 仅在默认分支推送时生成latest标签 type=raw,value=latest,enable={{is_default_branch}}
同时调整工作流触发条件,包含默认分支推送:
on: push: branches: - main # 替换为你的默认分支名 tags: - v*
这样推送v1.0.0标签时,GHCR会同时生成1.0.0、1.0、1三个Semver标签,推主分支时会生成latest标签。
方案2:自动递增Semver标签(无需手动打标签)
如果想要推主分支时自动生成递增的版本号(如从v1.0.0自动到v1.0.1),结合anothrNick/github-tag-action实现:
- 调整工作流触发条件:
on: push: branches: - main
- 添加自动标签生成步骤:
- name: Bump version and push tag id: tag_version uses: anothrNick/github-tag-action@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} DEFAULT_BUMP: patch # 可选值:major/minor/patch,默认按补丁版本递增
- 修改
Extract metadata步骤,使用自动生成的标签:
- name: Extract metadata id: meta uses: docker/metadata-action@v3 with: images: ghcr.io/skysourced/findtheducks tags: | # 使用自动生成的Semver标签(如v1.0.1) type=raw,value={{ steps.tag_version.outputs.new_tag }} # 生成纯Semver格式标签(如1.0.1) type=raw,value={{ steps.tag_version.outputs.new_version }} # 同步生成latest标签 type=raw,value=latest
- 确保
Build and push步骤使用生成的标签:
- name: Build and push uses: docker/build-push-action@v2 with: context: . push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }}
这样每次推主分支时,工具会自动递增版本号并推送到GitHub,同时GHCR会同步生成带v前缀、纯Semver格式和latest三种标签。
内容的提问来源于stack exchange,提问作者SkyBlu
相关产品推荐
相关产品推荐

