
장점
- Git Pull을 활용한 CI/CD : 상대적으로 다른 아키텍쳐의 파이프라인보다 Git Pull을 활용한 CI/CD 속도가 더 빠르다.
- 상대적으로 간단한 아키텍쳐 구조
단점
- 빌드 작업을 EC2에서 직접 진행하기 때문에 운영하고 있는 서버의 성능에 영향을 미칠 수 있다.
- Github 계정 정보가 EC2에 저장되기 때문에 개인 프로젝트, 작은 팀 규모 프로젝트에서만 사용이 가능하다.
초기 설정
1. 스프링부트 프로젝트 생성 및 간단한 Health Check Controller 생성

2. 깃허브에 스프링부트 프로젝트 업로드

3. AWS EC2 생성 후 깃허브 프로젝트 pull (생성 시 pem 키로 SSH 접근할 수 있도록 설정)
보안그룹 - 인바운드 트랙 8080 포트 listen 설정 추가
sudo apt update
sudo apt install openjdk-21-jdk
sudo apt install git
git clone https://github.com/nippyclouding/github-actions-pull
cd github-actions-pull
./gradlew clean build (프로젝트 빌드 - build/libs 경로에 jar 파일 산출)
cd build/libs
java -jar github-actions-0.0.1-SNAPSHOT.jar

CI CD 적용
- 스프링부트 프로젝트에 ./github/workflows 생성 후 그 속에 deploy.yml 생성
mkdir .github/workflows
cd .github/workflows
touch deploy.yml
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/github-actions-pull
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 &
uses: appleboy/ssh-action@v1.0.3
=> SSH로 EC2에 접속할 수 있도록 하는 Github Actions의 외부 라이브러리 (외부 Market Place)
sudo fuser -k -n tcp 8080 || true
=> 현재 실행 중인 8080 포트 프로젝트를 종료하거나, 만약 8080에서 실행 중인 프로젝트가 없다면 다음 명령어로 넘어간다.
nohup java -jar build/libs/*SNAPSHOT.jar > ./output.log 2>&1 &
=> 백그라운드로 SNAPSHOT.jar 파일 실행 후 관련 로그를 /output.log에 저장 (> : 표준 입출력)
Github 프로젝트 Setting에 환경 변수 설정
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
- deploy.yml에 지정한 환경 변수 추가 (settings -> secrets and variables)


위 EC2_HOST와 같이 각 값들을 추가하면 된다.
EC2_HOST : EC2의 외부 IP
EC2_USERNAME : EC2에서 사용하는 사용자 이름 (보통 기본 설정 ubuntu)
EC2_PRIVATE_KEY : EC2에 SSH로 접속할 때 사용되는 pem key
- 로컬 맥에서 .pem 키를 cat 으로 확인 후 복사하여 입력
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
형태로 되어있으며, --- 부분까지 추가해야 한다.
이후 스프링부트 프로젝트 수정, commit 시 CI/CD 동작으로 변경 사항이 자동 적용된다.
'Infra > CI&CD' 카테고리의 다른 글
| [CI/CD] Github Actions : 기본 동작 (0) | 2026.06.03 |
|---|