백엔드 개발자 블로그

6. build.gradle 분석 본문

CI CD/Git Actions

6. build.gradle 분석

backend-dev 2023. 8. 20. 11:24

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 파일이 생성된다.

  1. {Projcet-Name}-{Version}-plain.jar
  2. {Projcet-Name}-{Version}.jar

  • 그렇게 빌드된 결과물을CodeDeploy는 해당 zip 파일을 인스턴스로 가져와
  • 사전에 정의한 배포 스크립트(= gh_deploy.sh)를 사용하여 배포하게 된다.
  • Github Action deploy.yaml에서 zip 파일로 만들어 S3에 저장하고

문제 상황

  • 프로세스를 보면 아무 문제가 없어 보이지만
  • jar 파일을 생성하는 시점에 문제가 발생한다.
  • 배포 스크립트(= gh_deploy.sh)를 보면 다음과 같은 수식으로 jar 파일을 찾는다.
  • –> JAR_PATH=”/home/ubuntu/github_action/build/libs/*.jar”
  • 여기서 찾은 jar 파일을 우리는 배포를 할 텐데원래 의도는 “-plain”이 붙지 않은 jar를 배포해야 한다.
  • 이 상황에서 의도치 않게 “-plain”이 붙은 jar가 배포될 수 있다.
  • 그래서 “-plain”이 붙은 jar를 배포하려고 하면no main manifest attribute, in /home/ubuntu/github_action/{Projcet-Name}-{Version}-plain.jar
  • 다음가 같은 error를 발생시키면서 배포를 실패하게 된다.
  • 그래서 위와 같은 상황을 방지하고자
  • “-plain”이 붙은 jar는 생성되지 않도록 build.gradle에 아래와 같은 코드가 필요하다.
jar {
    enabled = false
}

Summary


Reference

'CI CD > Git Actions' 카테고리의 다른 글

7. Git Secrets  (0) 2023.08.20
5. appspec.yaml 분석  (0) 2023.08.20
4. deploy.yaml 분석  (0) 2023.08.20
3. AWS CodeDeploy 생성 및 설정  (0) 2023.08.20
2. AWS S3 생성 및 설정  (0) 2023.08.20