Github Action无法检出动作仓库子模块 求解决方法
GitHub Actions 自定义动作子模块缺失问题解决办法
问题背景
使用包含子模块的自定义动作仓库时,GitHub Actions仅检出动作的文件,不会拉取子模块内容,且动作目录下没有.git文件夹,常规git submodule update命令无法执行,导致子模块目录为空。
解决方法
方法1:在动作内部手动克隆子模块
直接在动作的步骤里添加克隆命令,把子模块仓库内容拉到对应的空文件夹中。修改动作仓库的action.yml:
name: "Submodule Test" description: "" runs: using: "composite" steps: - name: 拉取子模块内容 shell: bash run: | # 替换为你的子模块仓库HTTPS地址和目标路径 git clone 子模块仓库地址 ${{ github.action_path }}/submodule - name: execute test shell: cmd run: | tree /F /A ${{ github.action_path }}
如果用Windows cmd环境,把克隆命令改成:
git clone 子模块仓库地址 %GITHUB_ACTION_PATH%\submodule
优点:无需修改调用动作的workflow,改动集中在动作本身;缺点:子模块更新时需要同步修改克隆地址或指定分支。
方法2:将动作改为Docker容器类型
把自定义动作做成Docker容器动作,构建镜像时将子模块内容一并打包进去,这样Actions运行时直接使用完整镜像,不会出现子模块缺失。
- 在动作仓库根目录创建
Dockerfile:
FROM ubuntu:latest # 可替换为你需要的系统镜像 RUN apt-get update && apt-get install -y git WORKDIR /action # 克隆动作仓库并拉取所有子模块 RUN git clone --recurse-submodules 动作仓库地址 . # 添加动作执行的命令(根据你的实际需求修改) CMD ["bash", "./your-execution-script.sh"]
- 修改
action.yml为Docker类型:
name: "Submodule Test" description: "" runs: using: "docker" image: "Dockerfile"
优点:环境一致性强,子模块内容固化在镜像中;缺点:需要维护Docker镜像,构建和发布流程稍复杂。
方法3:在Workflow中完整克隆动作仓库(带子模块)
不直接用uses:调用动作,先克隆动作仓库并拉取子模块,再本地调用动作。修改调用端的.github/workflows/test.yml:
name: Submodule Test on: workflow_dispatch jobs: Pyinstaller: runs-on: windows-latest steps: - name: 克隆动作仓库并拉取子模块 uses: actions/checkout@v4 with: repository: 动作仓库全名(如用户名/仓库名) ref: main # 替换为你需要的分支 submodules: true path: ./actions_submodule_main # 克隆到本地的路径 - name: 执行动作 uses: ./actions_submodule_main
优点:灵活控制子模块拉取时机,支持私有子模块(可配合actions/checkout的token参数传入权限令牌);缺点:需要修改调用动作的workflow代码。
内容的提问来源于stack exchange,提问作者JohannesK71083
相关产品推荐
相关产品推荐

