You need to enable JavaScript to run this app. 如何在GitHub Actions的打标签构建场景中获取对应分支名称
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitHub Actions的打标签构建场景中获取对应分支名称

解决方案

Git 标签本质是绑定到具体提交对象的引用,本身不关联分支信息,因此标签触发的 GitHub Action 事件默认不会携带分支元数据,这是之前所有方案都无法拿到分支名的核心原因。

你不需要额外安装第三方Action插件,通过原生Git命令即可校验标签对应的提交是否属于master分支,满足你仅在master分支打标签时推送镜像的需求,具体配置如下:

工作流配置示例

name: 推送Docker镜像到Docker Hub
on:
  push:
    tags:
      - 'v*' # 可替换为你实际需要触发的标签规则,匹配所有标签可写为'*'

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - name: 检出代码
        uses: actions/checkout@v4
        with:
          fetch-depth: 0 # 必须拉取全量仓库数据,否则无法查询提交所属分支

      - name: 校验标签是否归属master分支
        id: check-branch
        run: |
          # 查询当前提交是否存在于远端master分支的提交链中
          if git branch -a --contains ${{ github.sha }} | grep -q 'remotes/origin/master'; then
            echo "is_master=true" >> $GITHUB_OUTPUT
          else
            echo "is_master=false" >> $GITHUB_OUTPUT
          fi

      - name: 登录Docker Hub
        if: steps.check-branch.outputs.is_master == 'true'
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_TOKEN }}

      - name: 构建并推送Docker镜像
        if: steps.check-branch.outputs.is_master == 'true'
        uses: docker/build-push-action@v5
        with:
          push: true
          # 可根据需求自定义镜像标签,${{ github.ref_name }}为当前触发的标签名
          tags: 你的DockerHub用户名/你的仓库名:${{ github.ref_name }}

可选优化

如果存在提交被cherry-pick到多个分支的场景,担心误判,可以将校验步骤的命令替换为以下内容,限制只有master分支的最新提交打标签才会触发推送:

if [ "${{ github.sha }}" = "$(git rev-parse origin/master)" ]; then
  echo "is_master=true" >> $GITHUB_OUTPUT
else
  echo "is_master=false" >> $GITHUB_OUTPUT
fi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 06:03:04