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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:05:16