깃허브에서 리포지토리를 생성하고 내가 생성한 스프링 부트 프로젝트를 리포지토리에 어떻게 추가하느냐에 따라서 Github Action 설정 경로가 다르다. 대부분은 루트 디렉터리에 생성한 스프링 부트 프로젝트를 구성 여부에 따라 아래와 같이 나뉘게 된다.
1. 루트 디렉터리에 스프링 부트 프로젝트 구성하기
루트 디렉터리에서 스프링 부트 프로젝트를 구성하고 Github Action 설정은 정말 많은 예제가 존재하고 비교적 쉽고 빠르게 Github Action 으로 CI/CD 를 설정할 수 있다. 따라서 해당 방식의 설명은 넘어간다.
2. 루트 디렉터리 안에 여러 개의 디렉터리로 구성하기
일반적으로 루트 디렉터리 하위에 여러 개의 디렉터리가 존재하는 경우는 프로젝트 리포지토리인 경우이다. 이 방식에서 Github Action 을 설정하려면 하위 디렉터리 경로에 알맞게 제대로 작성해야만 CI/CD 를 구성할 수 있다. 그림과 같이 두 개의 디렉터리(.github/workflows, cicd)와 한 개의 파일(.md)으로 구성되어 있을 때, 아래와 같이 작성하면 실행할 수 있다.
Github Action 에서 제공되는 Actions secrets and variables 으로 치명적인 정보를 관리할 수 있다.
내가 작성한 Github Action 의 특징은 AWS EC2 안에 배포에 필요한 .jar 파일만 존재한다. Github Action 에서는 스프링 부트 프로젝트를 실행한 배포 파일인 .jar 파일을 AWS EC2 으로 전달하여 다방면의 이점을 가질 수 있다.
name: Deploy To EC2
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Github Repository 파일 불러오기
uses: actions/checkout@v4
- name: JDK 17버전 설치
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: application.yml 파일 만들기
run: echo "${{ secrets.APPLICATION_PROPERTIES }}" > ./src/main/resources/application.yml
working-directory: ./cicd
- name: gradlew 권한 변경하기
run: chmod +x ./gradlew
working-directory: ./cicd
- name: 테스트 및 빌드하기
run: ./gradlew clean build
working-directory: ./cicd
- name: 빌드된 파일 이름 변경하기
run: mv ./cicd/build/libs/*SNAPSHOT.jar ./project.jar
- name: SCP로 EC2에 빌드된 파일 전송하기
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
source: project.jar
target: /home/ubuntu/cicd/tobe
- name: SSH로 EC2에 접속하기
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
script_stop: true
script: |
rm -rf /home/ubuntu/cicd/current
mkdir /home/ubuntu/cicd/current
mv /home/ubuntu/cicd/tobe/project.jar /home/ubuntu/cicd/current/project.jar
cd /home/ubuntu/cicd/current
sudo fuser -k -n tcp 8080 || true
nohup java -jar project.jar > ./output.log 2>&1 &
rm -rf /home/ubuntu/cicd/tobe
AWS CodeDeploy 와 AWS S3 을 구성하여 빌드 파일을 실행할 수 있다. 빌드 파일을 배포하는 방법은 다음글을 참고하자.