0%

Git 仓库中脚本无执行权限问题的解决方法

问题描述

CI 在编译项目时报错如下:

10:09:17 + ./gradlew --refresh-dependencies assembleRelease test --parallel --no-daemon
10:09:17 /tmp/hudson9094001854298651528.sh: line 11: ./gradlew: Permission denied
10:09:17 Build step 'Execute shell' marked build as failure
10:09:17 Archiving artifacts
10:09:17 Finished: FAILURE

原因分析

目测是由于CI环境中这个 gradlew 脚本没有权限导致的.
并且尝试发现即便在本地使用 chmod 给这个文件加上运行权限, 也没法提交这个 “变化”, Git 根本检测不到这个动作.

解决办法

解决问题的关键是让 Git 把脚本权限一起 commit 并且 push 到服务器.
经过翻阅相关文档发现可以使用命令让 Git 知道某个文件需要更新权限, 如下:

git update-index --chmod=+x gradlew

命令需要在 git add 之后使用; 也可以在 git commit 之后使用, 但此时需要将权限修改的动作一并提交(可以使用 git commit --amend 修改已经已经提交的代码)再推送到服务器. 注意 gradlew 是仓库中脚本路径, 请根据实际情况调整.

引用

https://stackoverflow.com/questions/58282791/why-when-i-use-github-actions-ci-for-a-gradle-project-i-face-gradlew-permiss

  • 本文作者: 6x
  • 本文链接: https://6xyun.cn/article/118
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-ND 许可协议。转载请注明出处!