[CI/CD] SpringBoot 프로젝트 Github Action으로 자동 배포하기

ZEDY·2023년 11월 3일
3

[백엔드] Spring Boot

목록 보기
19/27

도입 상황

원래 개발 완료 후, 수동으로 서버에 배포하였다. 다음 흐름으로 진행하였다.

아래 명령어를 통해 현재 실행중인 java process를 종료합니다.

ps aux | grep java 로 현재 실행중인 pid를 얻어온 다음

kill -9 ${pid} 로 해당 프로세스를 종료합니다.

그리고 현재 빌드된 결과물을 제거하기 위해 gradlew clean을 실행시켜 빌드 디렉토리를 제거합니다.

gradlew bootJar 를 통해 빌드된 jar 파일을 생성한 후,

nohup java -jar -Dspring.profiles.active=dev -Djasypt.encryptor.password=fKBrCp7zwFaiHM73HE2wbbE0k0VE41U4 ./build/libs/mynail-backend-0.0.2.jar kr.mynail.backend.MynailBackendApplication & 명령어로 백그라운드에서 spring 을 실행시키면 됩니다.

모니터링은 tail -f nohup.out 을 통해 nohup.out 이라는 파일에 생성되는 log를 보실 수 있습니다.

문제 상황

이렇게 수동으로 배포를 하다보면, 클라이언트가 바로바로 완성된 API를 호출할 수 없다.
그래서 자동 배포가 가능한 Github Action을 사용해 CI/CD를 구축하고자 한다.

방법

Step 1. Java with Gradle 선택

Step 2. 코드 수정

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle

name: Java CI with Gradle

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

permissions:
  contents: read

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Set up JDK 17
      uses: actions/setup-java@v3
      with:
        java-version: '17'
        distribution: 'temurin'
    - name: Grant execute permission for gradlew
      run: chmod +x gradlew
    - name: Build with Gradle
      # uses: gradle/gradle-build-action@bd5760595778326ba7f1441bcf7e88b49de61a25 # v2.6.0
      # with:
        # arguments: build
      run : ./gradlew clean build --exclude-task test

처음 코드 그대로 하면 빌드가 실패한다. 이유는 test 때문이다.
--exclude-task test
코드를 뒤에 붙여줘서 빌드시 test를 제외하도록 하였다.

CI 성공 !

Step2. EC2
태그를 생성하고, IAM에서 역할을 추가한다.
EC2를 서비스로 추가하고

이거를 선택한다. S3가 접근할 수 있도록 하는 것이다.

그런 다음에, EC2로 들어가서 인스턴스와 연결을 한다.


이렇게 하면 된다.

Step 3. Deploy 설치
https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-ubuntu.html
따라하면 된다.

ssh에 접속이 계속 안되서 뭐가 이상한지 삽질했는데.. 여기가 원래 개발하던 곳이 아니라 ip 주소가 달라서 접속이 거부가 되었던거다..ㅋ

암튼 접속 한 다음, 다시 AWS로 가서 S3 버킷을 생성해 준다.

Step 4. Code Deploy 생성 후 연결

IAM에 들어가 code deploy 역할을 생성한 후,
Code Deploy에 들어가 배포를 위한 애플리케이션을 생성한다.

Step 5. IAM 연결


암튼 하다가

오류 : Error: Gradle script '/home/runner/work/*/gradlew' is not executable.

해결 방법

deploy.yml에 한 단계를 더 추가해줬다.

 - name: Run chmod to make gradlew executable
   run: chmod +x ./gradlew


성공!


세팅 완료~


참고
https://bcp0109.tistory.com/363
https://tilnote.io/books/63840068bd82f57d88ab204d/63cb8765beb8f99839a04c91

profile
Spring Boot 백엔드 주니어 개발자

0개의 댓글