问题描述
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 是仓库中脚本路径, 请根据实际情况调整.