문제점 발생
Jenkins에서 파일 실행 권한이 없어서 gradlew 스크립트를 실행할 수 없는 문제
Windows에서 개발한 프로젝트를 github에 업로드 후 Jenkins에 다운로드 받은
-rw-r--r-- 1 jenkins jenkins 8692 Feb 20 05:12 gradlew 의 권한과
Windows에서의
rwxr-xr-x 1 Admin 197121 8692 Feb 20 09:17 gradlew* 권한이 달랐다.
그 이유는
Windows와 Unix 계열 운영체제(예: Linux, macOS)에서는 파일 권한 표현 방식이 다르기 때문이다.
- Windows에서는 **rwxr-xr-x**와 같이 표현하지 않는 대신에 파일 속성을 통해 권한을 설정하고
- Unix 계열 운영체제에서는 **rwxr-xr-x**와 같은 표기법을 사용하여 각각의 권한을 표현한다.
파일 속성과 권한 표현법이 다르기 때문에, Git 저장소를 Windows에서 Clone한 경우에는 해당 파일들이 Windows 스타일의 권한을 가지게 된다. 그러나 Jenkins 서버에서는 Unix 계열 운영체제를 사용 중이므로 Jenkins에서는 파일 실행 권한이 없어서 gradlew 스크립트를 실행할 수 없게 된다.
해결 방법은 다음과 같이 적용해주면 된다.
- gradlew 스크립트 실행 권한 추가: chmod +x gradlew 이 명령을 gradlew 스크립트가 있는 디렉토리에서 실행하여 gradlew 파일에 실행 권한을 추가한다.
- chmod +x gradlew
- 변경된 파일을 Git에 커밋 및 푸시:
- 변경된 권한을 Git에 커밋하고, Jenkins에서 이를 다시 Clone할 때 변경된 권한이 적용된다.
git add gradlew
git commit -m "Add execute permission to gradlew"
git push
이렇게 하면 Jenkins에서 gradlew 스크립트를 실행할 때 권한 문제가 발생하지 않는다.
해결 방법(git bash)
Admin@1-28 MINGW64 /c/cloud/04.spring/step06_ci_test (main)
$ git ls-tree HEAD
100644 blob 7f915e854f0f664ece4c9307c07fb647cc1869b0 .gitignore
100644 blob d5ad0a9ae1f1a996a49b1c6d50ea655c7bac8c89 README.md
100644 blob 498675c2bc091d1599cca09b2fc0b62f22fe70bb build.gradle
040000 tree 55db975f04cca2f3a8faf1f93ee2fd8abff54f39 gradle
100644 blob 1aa94a4269074199e6ed2c37e8db3e0826030965 gradlew
100644 blob 93e3f59f135dd2dd498de4beb5c64338cc33beeb gradlew.bat
100644 blob 0763b5e1987100709136c8449f8a1a9353886a92 settings.gradle
040000 tree 9d3abd93a049704863950cd69f59734980e032f0 src
Admin@1-28 MINGW64 /c/cloud/04.spring/step06_ci_test (main)
$ git update-index --add --chmod=+x gradlew
Admin@1-28 MINGW64 /c/cloud/04.spring/step06_ci_test (main)
$ git status
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
(use "git restore --staged ..." to unstage)
modified: gradlew
Admin@1-28 MINGW64 /c/cloud/04.spring/step06_ci_test (main)
$ git add .
Admin@1-28 MINGW64 /c/cloud/04.spring/step06_ci_test (main)
$ git status
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
(use "git restore --staged ..." to unstage)
modified: gradlew
Admin@1-28 MINGW64 /c/cloud/04.spring/step06_ci_test (main)
$ git commit -m "[Update] gradlew 실행 권한"
[main f80c7d4] [Update] gradlew 실행 권한
1 file changed, 0 insertions(+), 0 deletions(-)
mode change 100644 => 100755 gradlew
Admin@1-28 MINGW64 /c/cloud/04.spring/step06_ci_test (main)
$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
Admin@1-28 MINGW64 /c/cloud/04.spring/step06_ci_test (main)
$ git push origin main
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 258 bytes | 258.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To <https://github.com/parfait2/fisa240220.git>
2e9bcc6..f80c7d4 main -> main
Admin@1-28 MINGW64 /c/cloud/04.spring/step06_ci_test (main)
$ git status
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
이제 Jenkins에서 실행 권한이 부여된 것을 확인할 수 있다.
'Infra' 카테고리의 다른 글
[AWS] CloudWatch, S3를 활용한 실습 (0) | 2024.02.28 |
---|---|
[AWS] DynamoDB 테이블 생성 및 데이터 조회 (0) | 2024.02.26 |
[AWS EC2] Docker로 Jenkins 설치 및 GitHub Webhook 설정 (0) | 2024.02.21 |
[Docker] 리눅스 환경에서 컨테이너 관리하고 실행하기 (1) | 2024.02.16 |
Ubuntu에 있는 MySQL을 로컬 Windows JDBC와 연결하기(Eclipse) (0) | 2023.12.12 |