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,需明确指定仓库绝对路径避免递归:
- 先确保
my-path/action.yml配置正确(Docker Action示例):
name: My Docker Action runs: using: "docker" image: "Dockerfile" inputs: arg1: required: false arg2: required: false
- 修改复合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
相关产品推荐
相关产品推荐

