Post

무작정 따라 해보는 배포 3

무작정 따라 해본 배포, 근데 CI/CD를 곁들인 근데 Github Actions도 함께 곁들인

무작정 따라 해보는 배포 3

CI/CD 무엇일까?

GitHub Actions를 활용한 CI/CD

내가 작성한 CI/CD Workflows는 다음과 같다. 일반적인 방법인지는 모르겠지만 내가 이해한 대로는 크게 2가지의 동작으로 나누어진다고 생각한다.

  1. GitHub에서 제공하는 가상 환경에서 빌드 수행
    • 어떤 환경에서 빌드를 수행할지 가상 환경을 설정 (우분투 환경에서)
    • 자바 스프링 프로젝트임으로 jdk 설치(설정)
    • 빌드 도구 설정 (gradle 사용, 캐싱하는 경우 더 빠른 빌드가 가능해짐)
  2. 빌드의 결과물(JAR)을 EC2에서 실행하기
    • SCP를 활용해 Github의 가상 환경에서 빌드한 jar 파일을 EC2로 이동 시키기
    • SSH 접속을 통해 EC2에서 배포 스크립트를 실행

      • pem key를 활용해 EC2에 접속 가능
      • GitHub secrets을 통해 민감한 환경 변수 관리 가능
      • 배포 스크립트를 통해 개발한 웹 애플리케이션을 백그라운드에서 실행

deploy.sh

Github Actions의 동작을 통해 나의 서버(EC2)에는 빌드가 완료된 파일(jar)이 저장되기 때문에 배포 스크립트에서는 해당 파일을 실행만 해주면 된다. 이전에 작성했던 deploy.sh는 다음과 같이 매우 짧아진다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
BUILD_PATH=/home/ubuntu/mydeploy/build/libs
PORT=8080

# 기존에 실행중이던 애플리케이션을 종료
CUR_PID=$(lsof -i :$PORT -t)

if [ -z "$CUR_PID" ]; then
    echo "8080포트를 사용하는 프로세스가 없어 애플리케이션을 시작"
else
    echo "8080포트를 사용하는 프로세스 종료"
    kill -15 $CUR_PID
    sleep 5
fi

# 실행할 jar파일의 파일명을 알아내기
JAR_PATH=$(ls -tr $BUILD_PATH/*.jar | grep -v plain | tail -n 1)

echo "> 애플리케이션 실행"
nohup java -jar $JAR_PATH > $BUILD_PATH/app.log 2>&1 &

확인하기

CI/CD가 제대로 구축 되었는지 확인해보기 위해 index.html에 추가적인 텍스트를 추가해 주었다. deploy.yml에 명시 되어 있는대로 branch에 push가 생기면 명시되어 있는 명령어들이 실행됨에 따라 수정 사항이 반영된 채로 애플리케이션이 실행되는것을 확인할 수 있다.

여담

로그를 꼭 남겨야하는가? 라는 의문이 있어 jar파일을 실행만 해보았다.

This post is licensed under CC BY 4.0 by the author.