Infra/CI&CD

[CI/CD] Github Actions 1 : Git Pull 방식의 CI/CD

nippycloud 2026. 6. 6. 19:05

 

장점

- 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