GitHub Actions 私有Composite Action POST阶段执行失败问题咨询
问题描述
拉取包含多个action的私有仓库时,在POST阶段会执行失败,报错信息如下:
Error: Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under '/home/runner/work/testjerome/testjerome/.github/actions/package_and_push_to_ECR'. Did you forget to run actions/checkout before running your local action?
复现步骤
- name: Check out main repository uses: actions/checkout@v2 - name: Get composite run steps repository uses: actions/checkout@v2 with: repository: myorg/myaction # Select revision ref: v1.0.0 # Personal access token to check out private repository token: ${{ secrets.PAT_TOKEN }} # Indicate where to check action out to path: .github/actions - name: Run action from private repo uses: ./.github/actions/myAction
该示例假设myorg/myaction是GitHub私有仓库,仓库内结构为myAction目录下存放action.yml文件。
咨询问题
如何在同一个仓库中存放多个action的前提下规避该问题?已知可以为每个action单独创建仓库,但该方案管理过于混乱,不考虑采用。
解决方案
该报错本质是GitHub Runner执行POST步骤时的路径校验异常,以及多action私有仓拉取后的路径冲突问题,可按以下方案解决,无需拆分单个action为独立仓库:
方案1:调整拉取路径与调用规则(最稳妥)
- 私有多action仓保持现有结构,根目录下每个子文件夹对应一个action,每个子文件夹内存放
action.yml即可 - 工作流中拉取私有仓时,指定路径为独立目录,不要和主仓库的
.github/actions目录混用,避免覆盖或清理冲突,示例如下:
- name: 检出主仓库 uses: actions/checkout@v4 - name: 检出私有多action仓库 uses: actions/checkout@v4 with: repository: myorg/myaction ref: v1.0.0 token: ${{ secrets.PAT_TOKEN }} # 拉取到独立自定义目录,不要直接放到.github/actions path: my-custom-actions - name: 调用私有仓中的myAction uses: ./my-custom-actions/myAction
方案2:必须使用.github/actions目录的场景
在私有仓的checkout步骤添加clean: false参数,关闭checkout动作的自动清理逻辑,避免目标路径下的文件被意外删除:
- name: 检出私有多action仓库 uses: actions/checkout@v4 with: repository: myorg/myaction ref: v1.0.0 token: ${{ secrets.PAT_TOKEN }} path: .github/actions # 关闭自动清理,避免已拉取的action文件被删除 clean: false
优化建议
如果私有仓中action数量较多,可添加sparse-checkout参数,仅拉取需要用到的action对应目录,减少拉取体积,提升执行效率:
- name: 检出私有多action仓库 uses: actions/checkout@v4 with: repository: myorg/myaction ref: v1.0.0 token: ${{ secrets.PAT_TOKEN }} path: my-custom-actions sparse-checkout: | myAction other-action-you-need
内容的提问来源于stack exchange,提问作者jerome
相关产品推荐
相关产品推荐

