본문 바로가기
Jenkins

jenkins git 연동 시 파일 권한 문제

by 옹알이옹 2023. 9. 6.
목차

1. 상황

2. 시도한 방법

3. 해결 방법


 1. 상황

window 로컬 서버에서 git hub에 push를 한다. 해당 push에 web_hook을 적용시켜 놓은 jenkins에서 해당 git hub 저장소에서 코드를 내려받는다. 젠킨스에서 jar 파일 생성을 위해 빌드를 하려는 순간 gradlew의 실행 권한이 없어 에러 발생.

java.io.IOException: Cannot run program "/var/lib/jenkins/workspace/dev/gradlew" 
(in directory "/var/lib/jenkins/workspace/dev"): error=13, Permission denied

 

* 참고로 jenkins - git hub를 연동한 상태에서 빌드를 시작하면 아래와 같은 경로에 github 소스를 가지고 와 빌드를 한다.

아래와 같이 gradlew의 권한이 644이다. 즉 소유자 본인조차 실행할 수 있는 권한이 없는 상태이다.
이러한 이유로 위의 에러가 발생한것이다.

 

jenkins의 project 코드

 


 2. 시도한 방법

 

jenkins 서버에서 직접 chmod 755 gradlew 명령어를 통해 권한을 수정 한 뒤 다시 빌드를 한다.

 

결과

하지만 이미 깃허브에 올라가 있는 소스에서 해당 파일의 권한은 644로 되어있기 때문에 현재 소스에서의 권한과 상관없이 변경한 권한이 다시 644로 덮어 써져 에러가 발생한다.

 

git hub에 올라가 있는 파일의 권한 문제이므로 직접 git hub 파일의 권한을 수정한다?

안타깝게도 git hub에 올라가 있는 파일의 권한을 직접 수정할 수 없다.

 

window 로컬 서버에서 해당 파일의 권한을 수정 한 뒤 저장소에 push한다.

window파일권한

이미 window 로컬 서버에 있는 gradlew 파일은 읽기 및 실행 권한이 존재하였다.

 

위와 같은 상황을 보았을 때 윈도우와 Git 의 시스템적인 차이로 인해 문제가 발생하는듯하다.

 3. 해결 방법

linux 서버에서 해당 git 저장소를 연결한 뒤 pull을 받아 gradlew 파일의 권한을 755로 변경한 뒤 push한다.

 

1. linux 서버에서 git hub 저장소를 받은 뒤 gradlew에 대한 권한을 확인해 보니 당연히 아래와 같았다.

gralew 권한

2. chmod 755 gradlew 명령어를 통해 파일의 실행 권한을 추가한다.

3. git config core.filemode true 명령어를 통해 git의 권한 변경을 가능하게 해야 한다. 

4. gradlew 파일을 vim 편집기로 연 뒤 띄어쓰기를 하나 넣어 git 변경점을 만든 뒤 commit => push 한다.

gradlew변경점

5. 이후에 다시 jenkins 빌드를 시도한다.=> 아까와 같은 에러가 발생하지 않고 빌드에 성공한다

jenkins 빌드 성공

 

반응형

'Jenkins' 카테고리의 다른 글

jenkins github docker 자동 배포 CI/CD  (0) 2023.09.05