Github Actions:如何无需检出整个项目即可运行.sh脚本?
仅检出GitHub仓库子目录并解决脚本权限拒绝问题
需求可行性
完全可行。不管是用第三方文件检出工具,还是官方actions/checkout的稀疏检出(sparse-checkout)功能,都能实现只拉取指定子目录的需求,既节省带宽,又能满足CI/CD流程的需要。
权限拒绝问题的解决方法
退出码126的核心原因是:你用的Bhacaz/checkout-files@v2工具只下载了文件内容,但没有保留Git仓库中记录的文件执行权限(即本地的-rwxr-xr-x权限),而官方actions/checkout因为是完整克隆仓库,会同步Git追踪的权限设置,所以之前能正常运行。
这里提供三种解决思路:
1. 手动为脚本添加执行权限(最快临时方案)
在运行脚本的步骤前,先执行chmod命令赋予执行权限,再运行脚本:
- name: Make script executable run: chmod +x CICD/CreateBuildTarget.sh - name: Run build target script run: ./CICD/CreateBuildTarget.sh
2. 改用官方actions/checkout的稀疏检出(推荐长期方案)
官方Action支持稀疏检出配置,既能只拉取指定子目录节省带宽,又能完整保留文件的权限设置,稳定性也更高。示例配置如下:
- name: Checkout only CICD directory uses: actions/checkout@v4 with: sparse-checkout: | CICD sparse-checkout-cone-mode: false # 关闭锥形模式,确保能精确检出指定子目录
配置完成后,直接运行脚本即可,无需额外设置权限,因为Git会同步你本地已经设置好的执行权限。
3. 若坚持使用Bhacaz/checkout-files
在该Action执行完成后,立即添加权限修复步骤,除了单独给目标脚本加权限,也可以批量修正目录下所有脚本的权限:
- name: Checkout CICD files uses: Bhacaz/checkout-files@v2 with: files: CICD/ - name: Fix script permissions run: chmod +x CICD/*.sh - name: Run build target script run: ./CICD/CreateBuildTarget.sh
内容的提问来源于stack exchange,提问作者Maximilian Hung
相关产品推荐
相关产品推荐

