You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用GitHub Action中Semantic Release生成的版本号标记Docker镜像

问题原因

${{ github.ref_name }} 取的是触发工作流的分支名(这里是master),因为你的工作流是在push到master分支时触发的,所以它不会自动引用Semantic Release生成的版本号。要实现用发布版本号打镜像标签,需要在release任务中捕获版本号,再传递给build任务。

解决方案

修改你的工作流,分两步:在release任务中提取并输出版本号,然后在build任务中引用这个版本号。同时优化Docker构建步骤避免重复构建。

修改后的完整工作流

name: Release

on:
  push:
    branches: [ master ]

jobs:
  release:
    permissions:
      contents: write
      issues: write
      pull-requests: write
    runs-on: ubuntu-latest
    # 定义release任务的输出变量,供build任务调用
    outputs:
      release_version: ${{ steps.get_version.outputs.version }}
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0 # 确保能获取完整提交历史,Semantic Release需要这个
      - uses: actions/setup-node@v2
        with:
          node-version: 18
      - run: npm ci
      - run: npm run build
      - run: npx semantic-release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      # 提取Semantic Release更新后的版本号,输出为任务变量
      - name: 获取发布版本号
        id: get_version
        run: echo "version=$(npm pkg get version | tr -d '"')" >> $GITHUB_OUTPUT

  build:
    needs: release
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0 # 获取包含版本更新的最新代码
      - name: 登录容器注册表
        uses: docker/login-action@v1 
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}
      # 一次构建并推送多个标签(latest和版本号),避免重复构建
      - name: 构建并推送Docker镜像
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: |
            ghcr.io/ioncoder/gitflow-test-gui:latest
            ghcr.io/ioncoder/gitflow-test-gui:${{ needs.release.outputs.release_version }}

关键修改点

  1. 捕获版本号:在release任务最后添加步骤,从更新后的package.json中提取版本号,通过GITHUB_OUTPUT输出为任务变量release_version。
  2. 传递版本号:在release任务的outputs中声明变量,build任务通过needs.release.outputs.release_version引用。
  3. 优化Docker构建:将两次docker/build-push-action合并为一次,同时推送latest和版本号标签,节省构建时间。
  4. 完整代码拉取:给actions/checkout添加fetch-depth: 0,确保能获取到Semantic Release提交的版本更新和CHANGELOG。

内容的提问来源于stack exchange,提问作者PrestonDocks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 00:42:48