Jenkins运行sh脚本报permission denied,Windows+IDEA环境如何修改权限并提交?
问题根因
Windows 系统原生不支持 Linux 类的可执行权限位,Git for Windows 默认开启了core.filemode=false配置,会自动忽略文件权限的变更,因此你本地执行chmod +x后 Git 无法识别到变更。
解决方案
方案1:直接修改 Git 仓库中的文件权限标记(最快捷)
无需调整本地文件权限或 Git 配置,直接在 Git Bash 中执行以下命令修改 Git 暂存区的权限标记即可:
git update-index --chmod=+x ./bin/prepare.sh git commit -m "add execute permission for prepare.sh" git push
命令执行后 Git 会识别到权限变更,推送至远端后 Jenkins 拉取代码时会自动带上可执行权限。
方案2:修改 Jenkinsfile 执行逻辑(无需调整文件权限)
直接调整 Jenkins 阶段的执行命令,绕开可执行权限要求,有两种写法可选:
- 用 bash 直接调用脚本,不需要脚本本身有可执行权限:
stage('Prepare') { sh 'cd ./bin && bash prepare.sh' }
- 执行脚本前先在 Jenkins 节点上赋权:
stage('Prepare') { sh 'cd ./bin && chmod +x prepare.sh && ./prepare.sh' }
方案3:开启 Git 权限跟踪(适合长期需要调整脚本权限的场景)
先修改当前仓库的 Git 配置,开启权限跟踪:
git config core.filemode true
之后再执行chmod +x ./bin/prepare.sh就会被 Git 识别为变更,正常提交推送即可。如果需要全局生效,在命令中添加--global参数即可。
内容的提问来源于stack exchange,提问作者Nikolas
相关产品推荐
相关产品推荐

