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

如何配置GitHub Actions仅在main分支的标签触发生产构建?

解决GitHub Actions仅在main分支创建标签时触发构建的问题

现有配置的问题

当前配置里on.push同时指定了branches和tags,这两个条件是逻辑或关系——只要推送匹配任意一个条件(比如在develop分支打v*标签、推送代码到hotfix/**分支),就会触发工作流,完全不符合你“仅在main分支创建标签时触发”的需求。

解决方案

需要调整触发规则,同时添加分支校验步骤,确保只有main分支上的标签才会执行后续构建:

  1. 精简触发规则:只监听v*标签的推送,移除branches配置,避免非标签的推送触发工作流。
  2. 添加分支校验:通过git命令验证当前标签对应的提交是否属于main分支,若不属于则直接终止工作流。

修改后的完整配置

name: Release to production
on:
  push:
    tags:
      - 'v*'
    
jobs:
  get-version-data:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0  # 拉取完整仓库历史,保证能检查分支关联

      - name: 验证标签属于main分支
        run: |
          # 拉取远程main分支到本地
          git fetch origin main:main
          # 检查当前提交(标签指向的提交)是否在main分支中
          if ! git branch --contains ${{ github.sha }} | grep -q 'main'; then
            echo "❌ 该标签不在main分支上,终止构建"
            exit 1
          fi

      - name: 从标签中提取生产版本号
        id: get_version
        run: echo "VERSION=$(echo ${{ github.ref }} | cut -d '/' -f 3 | cut -c2-)" >> $GITHUB_ENV

      - name: 设置构建编号
        run: echo "BUILD_NUMBER=$(($GITHUB_RUN_NUMBER + 125))" >> $GITHUB_ENV

      - name: 版本号未获取到则终止
        if: ${{ env.VERSION == '' }}
        run: exit -1

    outputs:
      version: ${{ env.VERSION }}
      build-number: ${{ env.BUILD_NUMBER }}

关键细节说明

  • fetch-depth: 0:必须拉取完整仓库历史,否则无法通过git命令检查提交与分支的关联关系。
  • git fetch origin main:main:显式拉取远程main分支到本地,避免本地无main分支导致校验失败。
  • 原配置中的hotfix分支相关步骤已移除,因为现在工作流仅针对main分支的标签触发,若需单独处理hotfix分支构建,建议新建独立工作流。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:10:31