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

如何避免GitHub Actions中机器人触发工作流循环?

解决GitHub Actions子模块更新导致的工作流循环问题

问题本质

你使用的是GitHub App令牌而非仓库默认的GITHUB_TOKEN,官方文档中“GITHUB_TOKEN不会触发新工作流”的规则仅针对GitHub自动生成的仓库默认令牌。GitHub App令牌属于独立身份,没有这个豁免机制,因此推送主仓库分支时会触发新的工作流,形成循环。

解决方案

1. 提交信息添加跳过关键词

直接在主仓库的提交消息里加上[skip ci]或[ci skip],GitHub Actions会自动跳过本次提交的工作流触发。修改后的代码片段:

git commit -m "Updated submodule [skip ci]"

注意:原代码里的Udpated是拼写错误,建议修正为Updated

2. 限制工作流触发条件

在工作流的on配置块里添加过滤规则,排除由GitHub App机器人账号触发的推送。示例:

on:
  pull_request:
  push:
    branches:
      - main
    # 替换成你的GitHub App对应的bot用户名,格式一般是「App名称[bot]」
    if: github.actor != 'your-github-app-name[bot]'

3. 改用仓库默认GITHUB_TOKEN(权限允许的话)

如果你的操作不需要GitHub App的特殊权限,直接用仓库自动生成的${{ secrets.GITHUB_TOKEN }}替换自定义的GitHub App令牌。默认令牌推送时不会触发新工作流,从根源避免循环。

修改后的工作流示例(以添加跳过关键词为例)

- name: Checkout submodule repo
  uses: actions/checkout@v4
  with:
    repository: submodule_repository
    path: submodule
    token: ${{ env.GITHUB_TOKEN }}
    fetch-depth: 0
    persist-credentials: true

- name: Writes to submodule
  run: |
    python ./main.py

- name: Push changes to submodule
  working-directory: submodule
  run: |
    git config user.name "name"
    git config user.email "email"
    git add .
    git commit -m "Created or excluded DAG"
    git push

- name: Checkout caller repo
  uses: actions/checkout@v4
  with:
    ref:  ${{ github.event_name == 'pull_request' && github.head_ref || github.ref }}
    path: caller
    token: ${{ env.GITHUB_TOKEN }}
    submodules: true

- name: Update caller repo to latest submodule
  working-directory: caller
  run: |
    git config user.name "name"
    git config user.email "email"
    git submodule update --recursive --remote
    git add .
    git commit -m "Updated submodule [skip ci]"
    git push

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 04:58:22