본문 바로가기
BE 📙/비전공자도 이해할 수 있는 cicd 입문 실전

개인 프로젝트(백엔드)에서 CI/CD 적용하기

by 경아ㅏ 2025. 3. 18.

 

배포 과정에 CI/CD를 적용하지 않았을 때

 

(1) 스프링 프로젝트를 EC2 서버에 배포하는 과정

 

sudo apt update
sudo apt install openjdk-17-jdk -y
(java -version)
git clone *****
./gradlew clean build
nohup java -jar ****-SNAPSHOT.jar (build > libs)

 


(2) 코드 수정이 발생했을 때 재배포하는 과정

git pull orgin main (+ Git 인증)
sudo fuser -k -n tcp 8080 (기존 프로세스 종료)
./gradlew clean build (빌드)
nohup java -jar ****-SNAPSHOT.jar (build > libs) (실행)


코드를 수정할 때 마다 EC2 서버에 접속해서 (2) 번 과정 계속 반복 필요

➡️ 해당 과정을 github Action 에 등록하여 git push 이벤트가 발생할 때 자동으로 pull/빌드/실행 하도록 하기

 

배포 과정을 Github Actions로 자동화 했을 때

 

1) 서버에서 Git 인증을 계속 하지 않아도 되도록 credential 등록

git config --global credential.helper store

 


2) push 가 일어나면 runner 서버에서 EC2 서버에 원격 접속하여 자동 빌드 및 실행 하도록 설정

 

.github > workflows > deploy.yml 작성

name: Deploy To EC2

on:
  push:
    branches:
      - main

jobs:
  Deploy:
    runs-on: ubuntu-latest
    steps:
      - 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: |
            cd /home/ubuntu/spring-server-test
            git pull origin main
            ./gradlew clean build
            sudo fuser -k -n tcp 8080 || true
            nohup java -jar build/libs/*SNAPSHOT.jar > ./output.log 2>&1 &


- EC2_HOST : EC2 서버의 퍼블릭 주소
- EC2_USERNAME : ubuntu
- EC2_PRIVATE_KEY : 인스턴스 띄울 때 내려받았던 .pem 키 복사하여 secret 으로 등록 

 

실습 테스트


테스트 서버 코드에 변경 사항을 push 했을 때 자동 반영이 되는지 확인 (Hi -> Good 텍스트 변경)
https://github.com/GyeongahNa/spring-server-test/actions/runs/13916355397/job/38940015613

 

 

 

댓글