어떤 에러인가
소스코드를 수정하고 Gradle을 Build하는 과정에서 어느 순간 부터 에러가 지속적으로 났었다.
에러명은 ClassNotFoundException GradleWrapperMain이라는 클래스를 찾을 수 없단다... 처음보는 종류의 에러였다.
저게 대체 뭔 클래스인데...???
CICD 스크립트를 보면
- name: Build with Gradle
run: |
echo ${{ secrets.APPLICATION_SECRET }} | base64 --decode > ./src/main/resources/application-secret.properties
echo ${{ secrets.APPLICATION_PROD }} | base64 --decode > ./src/main/resources/application-prod.properties
chmod +x ./gradlew
./gradlew clean build
Gradle을 Build하는 과정에서 에러가 발생했었다.
해당 부분의 스크립트작업을 하느데 있어서 계속해서 에러가 난다는건데 내 로컬PC로 돌아와서 프로젝트에다가 ./gradlew clean build 했을 때는 아무런 문제가 없었다. 깃허브액션스 스크립트 쪽에서 소스코드를 .jar 파일을 만드는 과정에서 난다는 것인데...
구글링 결과
구글링 결과 나와 같은 문제를 마주친 분들이 적게나마 있었다.
해당 관련글들을 봤을 때는 대부분 나와같은 문제는 아니였다. 문제는 크게 2가지로 나뉘어지는데 grale.wrapper.jar 파일이 손상이 되었으니 gradlew wrapper 명령어를 통해 재 설치 한후 이걸 원격 레포지토리에 push 한 뒤 재배포 하라는 사람이 있었고, gitignore 파일에 gralde 폴더가 포함되어서 원격 레포지토리에 gradle 파일이 없어서 발생한 문제라고 한 분도 있었다.
둘다 해봤는데 내 프로젝트에서는 똑같은 문제가 계속해서 발생했었다
내 프로젝트에서는 왜 안되는가....
정답은 Git LFS쪽이였다. CICD 스크립트를 작성하기전에 EC2를 통해 수동 배포를 먼저 진행하기 위해서, jar 파일을 생성하고 원격 저장소에 올리는 과정에서 .jar 파일이 너무 커서 안올라가지는 이슈가 있었다.
(25MB 이상은 못올린다는 그런 거였던거 같다...)
그 당시에는 수동 배포의 방식이 우분투 서버에서 wget 명령어로 원격저장소에 올린 .jar파일을 끌어다가 쓰는 방법밖에 몰랐어어 가지고 그렇게 했었는데, (현재는 수동 배포시에는 그냥 우분투 서버에서 git clone 명령어로 끌고와서 거기서 ./gradlew clean build 명령어를 통해 jar파일을 생성하고 실행하는 방식으로 한다) 내 입장에서는 수동 배포시 jar파일을 원격 저장소에 올릴려면 큰 파일들을 원격 저장소에 올리기 위해서는 Git LFS가 필요했었다.
Git LFS는 쉽게말해 큰 파일들을 깃허브 원격저장소에 파일이커도 올릴 수 있게 해주는 녀석이다. 그래서 Git LFS를 설치하고 jar파일을 올려서 한번 수동 배포를 거친뒤 문제가 없는 걸 확인하고 CICD 스크립트를 작성하기 시작했다.
한참무중단 배포 스크립트도 잘 작성하고 잘 작동했었는데 문제는 내 컴퓨터에서 인텔리제이에서 캐시버그가 있어서 이를 해결하기 위해 캐시를 다 날리고 프로젝트를 다시 켰는데... 어떤 이유에서인지 Git LFS 실행 정보에 대한 메타데이터들이 날라갔나보다... 그 뒤로 배포가 완전히 먹통이 되었었다...(팀원 분들께 너무 죄송합니다...)
그 뒤로 원인을 한참 찾다가 내가 우리 프로젝트의 원격 저장소를 git clone받고 다시 실행하게 됐었었는데, Git LFS에 대한 설정이 빠져있었다. 그로 인해 내가 PR을 올리고 Merge를 하면 배포가 실패하는 문제가 발생하기 시작했다.
해결방법
그래서 CICD 스크립트에다가 해당 명령어를 추가해줌으로써 문제를 해결할 수 있게 되었다.
- name: Install Git LFS
run: |
git lfs install
git lfs pull
해당 명령어를 추가해주니 배포가 잘 됐다....
혹시 구글링시 나오는 해결방법을 해보고 안된다면 Git LFS에 대한 설정은 추가하지 않았었나 라고 생각해보고 해당 부분을 CICD 스크립트 작성시 작성하도록하자!!
'프로젝트 이슈 및 몰랐던점 정리 > PlistAPI' 카테고리의 다른 글
[트러블 슈팅] 포트 분리로 인한 채팅 불가 feat Redis PubSub (0) | 2025.02.27 |
---|---|
[배포] Nginx + Certbot으로 https 연결하기 (0) | 2025.01.24 |