推送新标签后GitHub Actions工作流未触发,如何解决?
问题:标签推送后GitHub Actions工作流未触发
每当拉取请求(PR)合并到main分支时,我使用以下工作流创建新标签,该工作流运行正常:
name: Create new tag on push on main branch on: push: branches: - 'main' permissions: contents: write jobs: create-new-tag: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 with: fetch-depth: 0 - name: Get next version # 检查规范提交是否会导致版本更新 id: get_next_version uses: thenativeweb/get-next-version@2.5.0 - name: Create new tag if: ${{ steps.get_next_version.outputs.hasNextVersion == 'true' }} run: | git tag ${{steps.get_next_version.outputs.version}} git push origin ${{steps.get_next_version.outputs.version}}
我希望创建第二个工作流,在新标签推送时触发,用于构建应用并发布二进制文件,工作流代码如下:
name: Release binaries for new tag on: push: tags: - '*' jobs: release-binaries: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 with: fetch-depth: 0 # 该步骤用于确保构建与git标签匹配 - name: Checkout new tag run: git checkout ${{ github.ref_name }} - name: Next step run: echo "next ..."
但第二个工作流从未触发:提交feat: a change到main分支后,版本会升级并生成新标签,但不会触发第二个工作流。请问问题出在哪?
核心原因
第一个工作流使用GitHub默认的GITHUB_TOKEN推送标签时,GitHub会触发安全限制,阻止该操作触发其他工作流(防止无限循环执行),因此第二个监听标签推送的工作流无法被触发。
解决方案
方法1:使用Personal Access Token(PAT)推送标签
这是最可靠的解决方案:
- 在GitHub账号的「Settings > Developer settings > Personal access tokens」页面,创建一个带有
repo权限的PAT。 - 将该PAT添加到仓库的Secrets中,命名为
REPO_PAT。 - 修改第一个工作流的「Create new tag」步骤,使用PAT进行推送:
- name: Create new tag if: ${{ steps.get_next_version.outputs.hasNextVersion == 'true' }} run: | git tag ${{steps.get_next_version.outputs.version}} git push https://${{ secrets.REPO_PAT }}@github.com/${{ github.repository }}.git ${{steps.get_next_version.outputs.version}}
方法2:调整仓库Actions设置(部分场景适用)
在仓库的「Settings > Actions > General」页面:
- 将「Workflow permissions」设置为「Read and write permissions」。
- 勾选「Allow GitHub Actions to create and approve pull requests」(部分GitHub版本中为类似的“允许工作流触发其他工作流”选项)。
注意:该方法在公共仓库中可能受GitHub安全策略限制,优先推荐方法1。
额外检查点
- 确保第二个工作流文件存放在仓库的
.github/workflows/目录下,后缀为.yaml或.yml。 - 标签触发规则
tags: ['*']可正常匹配所有标签,若你的标签是语义化版本(如v1.0.0),可改为tags: ['v*']以更精准匹配。
内容的提问来源于stack exchange,提问作者baitendbidz
相关产品推荐
相关产品推荐

