部署Spring Boot到Cloud Run时Cloud Build遇gradlew权限拒绝错误
Cloud Run部署Spring Boot项目时
gradlew权限拒绝问题解决 问题
部署自定义REST接口的Spring Boot测试项目到Cloud Run,本地运行正常,但执行gcloud run deploy时构建容器失败。Cloud Build日志报错:fork/exec ./gradlew: permission denied,触发命令为./gradlew clean assemble -x test --build-cache --quiet。
解决步骤
1. 本地设置gradlew可执行权限
在项目根目录执行以下命令,赋予脚本执行权限:
chmod +x ./gradlew
执行后,重新提交代码(若使用Git),再重新运行gcloud run deploy。
2. 通过Dockerfile固化权限(推荐)
如果使用Cloud Build自动构建,在Dockerfile中添加权限配置步骤,确保每次构建都自动设置:
# 复制gradle wrapper文件并设置权限 COPY gradlew . COPY gradle/ gradle/ RUN chmod +x ./gradlew
这可以避免本地修改后忘记提交权限变更的问题。
3. 检查版本控制配置
确认.gitignore未排除gradlew文件,否则该文件不会被上传到Cloud Build环境,同样会引发权限或文件不存在错误。确保gradlew已提交至版本仓库。
项目目录结构
C:. +---.gradle ¦ +---8.4 ¦ ¦ +---checksums ¦ ¦ +---dependencies-accessors ¦ ¦ +---executionHistory ¦ ¦ +---fileChanges ¦ ¦ +---fileHashes ¦ ¦ +---vcsMetadata ¦ +---buildOutputCleanup ¦ +---vcs-1 +---.idea +---build ¦ +---classes ¦ ¦ +---java ¦ ¦ +---main ¦ ¦ ¦ +---com ¦ ¦ ¦ +---jameshskoh ¦ ¦ ¦ +---cloudrundemo ¦ ¦ +---test ¦ ¦ +---com ¦ ¦ +---jameshskoh ¦ ¦ +---cloudrundemo ¦ +---generated ¦ ¦ +---sources ¦ ¦ +---annotationProcessor ¦ ¦ ¦ +---java ¦ ¦ ¦ +---main ¦ ¦ ¦ +---test ¦ ¦ +---headers ¦ ¦ +---java ¦ ¦ +---main ¦ ¦ +---test ¦ +---libs ¦ +---reports ¦ ¦ +---tests ¦ ¦ +---test ¦ ¦ +---classes ¦ ¦ +---css ¦ ¦ +---js ¦ ¦ +---packages ¦ +---resources ¦ ¦ +---main ¦ ¦ +---static ¦ ¦ +---templates ¦ +---test-results ¦ ¦ +---test ¦ ¦ +---binary ¦ +---tmp ¦ +---bootJar ¦ +---compileJava ¦ +---compileTestJava ¦ +---jar ¦ +---test +---gradle ¦ +---wrapper +---src +---main ¦ +---java ¦ ¦ +---com ¦ ¦ +---jameshskoh ¦ ¦ +---cloudrundemo ¦ +---resources ¦ +---static ¦ +---templates +---test +---java +---com +---jameshskoh +---cloudrundemo
内容的提问来源于stack exchange,提问作者James Koh
相关产品推荐
相关产品推荐

