본문 바로가기
서버/네트워크 및 인프라

Jenkins에서 Gradle Build시 '허가 거부' 해결한 경험

by 방구쟁이 2024. 7. 6.
728x90

Jenkins를 이용하여 spring boot 프로젝트를 gradle로 빌드하는 job을 만들어 실행한 결과 아래와 같은 에러가 발생하였다.

더보기

Console message

Started by user wsyoon
Running as SYSTEM
Building in workspace /var/lib/jenkins/workspace/config_server_deploy/build-config-server The recommended git tool is: NONE using credential jenkins
Cloning the remote Git repository
Cloning repository http://{{ip:port}}/rascal/configserver.git
> git init /var/lib/jenkins/workspace/config_server_deploy/build-config-server # timeout=10
Fetching upstream changes from http://{{ip:port}}/rascal/configserver.git
> git --version # timeout=10
> git --version # 'git version 1.8.3.1'
using GIT_ASKPASS to set credentials jenkins {{ip:port}}
> git fetch --tags --progress http://{{ip:port}}/rascal/configserver.git +refs/heads/*:refs/remotes/origin/* # timeout=10
> git config remote.origin.url http://{{ip:port}}/rascal/configserver.git # timeout=10
> git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10 Avoid second fetch
> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
Checking out Revision 160da47b3a1ef93ad102f423de4cddaac59841e6 (refs/remotes/origin/master)
> git config core.sparsecheckout # timeout=10
> git checkout -f 160da47b3a1ef93ad102f423de4cddaac59841e6 # timeout=10
Commit message: "Merge branch 'refactor/yml-map' into 'master'"
First time build. Skipping changelog.
[Gradle] - Launching build.
[build-config-server] $ /var/lib/jenkins/workspace/config_server_deploy/build-config-server/gradlew clean build -Pprofile=prod -x test
FATAL: command execution failed
java.io.IOException: Cannot run program "/var/lib/jenkins/workspace/config_server_deploy/build-config-server/gradlew" (in directory "/var/lib/jenkins/workspace/config_server_deploy/build-config-server"): error=13, 허가 거부 at
java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128) at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071) at hudson.Proc$LocalProc.<init>(Proc.java:252) at hudson.Proc$LocalProc.<init>(Proc.java:221) at hudson.Launcher$LocalLauncher.launch(Launcher.java:994) at hudson.Launcher$ProcStarter.start(Launcher.java:506) at hudson.Launcher$ProcStarter.join(Launcher.java:517) at hudson.plugins.gradle.Gradle.perform(Gradle.java:321) at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20) at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:818) at hudson.model.Build$BuildExecution.build(Build.java:199) at hudson.model.Build$BuildExecution.doRun(Build.java:164) at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:526) at hudson.model.Run.execute(Run.java:1895) at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:44) at hudson.model.ResourceController.execute(ResourceController.java:101) at hudson.model.Executor.run(Executor.java:442)
Caused by: java.io.IOException: error=13, 허가 거부 at java.base/java.lang.ProcessImpl.forkAndExec(Native Method) at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:340) at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:271) at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1107)
... 16 more
Build step 'Invoke Gradle script' changed build result to FAILURE
Build step 'Invoke Gradle script' marked build as failure
Finished: FAILURE

허가 거부~~? 허가거부 ?!

허가 거부..?

 에러 로그를 간단히 살펴보아도 권한 문제로 짐작할 수 있다. gradlew의 권한이 어느 순간에 gitlab repository에 gradlew의 권한에 실행 권한이 사라진 것을 알 수 있었다. (git은 업로드 시 파일 내용 뿐 아니라, 권한도 함께 저장)

gradlew의 허가 거부는 다음 두가지 방법으로 해결할 수 있다고 판단했다.

 

1. repository에 gradlew 권한을 변경하여 git commit

'chmod +w gradlew '

위 방법은 근본적인 해결 방안으로 허가 거부가 발생한 원인을 해결해준다.

 

2. jenkins item gradlew 설정

invoke gradle script - user gradle wrapper - Make gradlew executable 체크

jenkins에서 gradle로 build 할 경우 Make gradlew executable 기능을 사용하여 gradlew를 실행할 수 있게 된다.

Jenkins Gradle Wrapper 설정 화면

 두가지 방법 모두 사용하는 것이 옳다고 생각했다.

 누군가 권한을 바꾸어 git에 올리게 될 경우 jenkins에서는 또 동일한 문제가 발생할 수 있기 때문이다.

- 끝-

728x90

댓글