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

GitHub复合Action同仓库调用出现递归循环问题求助

问题原因分析

递归循环的核心原因是复合Action中uses: ./my-path的用法在同仓库场景下触发了重复调用:

  • 当同仓库的CI.yml调用根目录的action.yml时,复合Action会先将当前仓库代码checkout到my-path目录。
  • 随后uses: ./my-path会尝试加载该目录下的action.yml(而my-path是当前仓库的副本,包含根目录的action.yml),进而再次执行整个复合Action逻辑,形成无限递归。
  • 外部仓库调用时,my-path目录拉取的是<org>/this-repo的代码,但外部仓库的工作流上下文不会触发自身的Action递归,因此无此问题。
修复方案

根据你的实际需求选择以下方案:

方案1:目标是构建my-path下的Dockerfile

如果my-path仅包含Dockerfile(而非独立Action),不能用uses指令,需替换为Docker构建命令或官方构建Action:

用原生Docker命令构建

修改复合Action的Main work步骤:

- name: Main work
  shell: bash
  run: |
    docker build -t my-custom-image ./my-path \
      --build-arg ARG1=${{ inputs.arg1 }} \
      --build-arg ARG2=${{ inputs.arg2 }}
  continue-on-error: true

用官方Docker构建Action

更推荐使用官方Action来处理构建逻辑:

- name: Main work
  uses: docker/build-push-action@v5
  with:
    context: ./my-path
    build-args: |
      ARG1=${{ inputs.arg1 }}
      ARG2=${{ inputs.arg2 }}
    push: false # 按需设置是否推送镜像
  continue-on-error: true

方案2:my-path是独立的Docker Action

如果my-path是一个包含自身action.yml的Docker Action,需明确指定仓库绝对路径避免递归:

  1. 先确保my-path/action.yml配置正确(Docker Action示例):
name: My Docker Action
runs:
  using: "docker"
  image: "Dockerfile"
inputs:
  arg1:
    required: false
  arg2:
    required: false
  1. 修改复合Action中的Main work步骤:
- name: Main work
  uses: <org>/this-repo/my-path@main
  with:
    arg1: ${{ inputs.arg1 }}
    arg2: ${{ inputs.arg2 }}
  continue-on-error: true
额外优化

复合Action中的checkout步骤可添加条件,仅在外部仓库调用时执行(同仓库调用时CI.yml已完成checkout):

- name: Checkout
  uses: actions/checkout@v5
  with:
    repository: <org>/this-repo
    path: my-path
  if: ${{ github.repository != '<org>/this-repo' }}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 13:25:09