TOC (Table of contents)
Prologue
-
이번 글에서는 서버를 배포하는 데 필요한 jar 파일 생성과 관련해
build.gradle에 대해 이야기를 나눠보려고 한다.
-
참고로 프로젝트 스택은 SpringBoot 2.6.3 + Gradle 7.3.3 이다.
배포 프로세스
-
build.gradle 이야기를 하기에 앞서
배포 프로세스에 대해 짚고 넘어가려 한다.
-
Spring 프로젝트 빌드 시 build.gradle 내용을 참조하게 된다.
( SpringBoot 2.5 이후 버전부터 ) 특별한 설정이 없이 빌드를 하게 되면 2가지 jar 파일이 생성된다.
-
{Projcet-Name}-{Version}-plain.jar
-
{Projcet-Name}-{Version}.jar
-
그렇게 빌드된 결과물을
Github Action deploy.yaml에서 zip 파일로 만들어 S3에 저장하고
CodeDeploy는 해당 zip 파일을 인스턴스로 가져와
사전에 정의한 배포 스크립트(= gh_deploy.sh)를 사용하여 배포하게 된다.
문제 상황
-
프로세스를 보면 아무 문제가 없어 보이지만
jar 파일을 생성하는 시점에 문제가 발생한다.
-
배포 스크립트(= gh_deploy.sh)를 보면 다음과 같은 수식으로 jar 파일을 찾는다.
–> JAR_PATH=”/home/ubuntu/github_action/build/libs/*.jar”
-
여기서 찾은 jar 파일을 우리는 배포를 할 텐데
이 상황에서 의도치 않게 “-plain”이 붙은 jar가 배포될 수 있다.
원래 의도는 “-plain”이 붙지 않은 jar를 배포해야 한다.
-
그래서 “-plain”이 붙은 jar를 배포하려고 하면
다음가 같은 error를 발생시키면서 배포를 실패하게 된다.
no main manifest attribute, in /home/ubuntu/github_action/{Projcet-Name}-{Version}-plain.jar
-
그래서 위와 같은 상황을 방지하고자
“-plain”이 붙은 jar는 생성되지 않도록 build.gradle에 아래와 같은 코드가 필요하다.
jar {
enabled = false
}
Summary
-
참고로 위에서 언급한 코드가 build.gradle에 반드시 필요하진 않다.
배포 스크립트에서 jar 파일을 찾는 코드를 수정해도 정상적으로 배포할 순 있다.