Github Action으로 CI/CD 구축하기

N’oublie pas de t’aimer·2025년 3월 13일

DIVE

목록 보기
3/10

기능을 추가하거나 수정할 때마다

로컬 브랜치에서 작업 -> push -> 깃헙에서 pull request 생성 -> merge -> 인스턴스에서 pull -> 빌드 -> 실행

위 과정을 매번 반복하는 것은 정말 번거롭다.

pull request를 merge하면
ec2 인스턴스에서 기존 실행하던 스프링부트 애플리케이션을 종료하고
pull -> build -> 실행하는 workflow를 만들어보자.

GitHub Action 시작하기

  • 깃허브 Repository의 Actions 탭으로 가면 GitHub Action Workflow 파일을 작성 할 수 있다.
  • 처음 workflow를 생성할 때는 깃허브에서 적절한 Template를 제공한다.
  • 원하는 템플릿을 선택하면 해당 템플릿을 바탕으로 workflow를 자유롭게 만들 수 있으며 저장소의 .github/workflows 에 yaml 파일이 생성된다.

Secret 환경 변수 등록하기

  • 깃허브에서는 organization, Repository에 Secret 변수를 등록한다.
  • 해당 변수를 workflow에서 사용하면 workflow의 로그에서는 환경변수로 나오며 해당 값을 노출 시키지 않는다.

SSH_PRIVATE_KEY에 .pub 파일의 내용을, HOST에 EC2의 퍼블릭 IP 또는 도메인 주소를, USER에 EC2에 접속할 때 사용하는 SSH 사용자명을 넣어준다.

Github Action Workflow

name: Deploy to EC2
on:
  pull_request:
    types: [closed]
    branches: [main]
jobs:
  deploy:
    if: github.event.pull_request.merged == true
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v2
    - name: Deploy to EC2
      env:
        PRIVATE_KEY: ${{ secrets.EC2_SSH_PRIVATE_KEY }}
        HOST: ${{ secrets.EC2_HOST }}
        USER: ${{ secrets.EC2_USER }}
      run: |
        echo "$PRIVATE_KEY" > private_key && chmod 600 private_key
        ssh -o StrictHostKeyChecking=no -i private_key ${USER}@${HOST} '
          cd dive &&
          PID=$(pgrep -f xidong-0.0.1-SNAPSHOT.jar) &&
          if [ ! -z "$PID" ]; then sudo kill -9 $PID; fi &&
          git pull &&
          ./gradlew build &&
          sudo nohup java -jar xidong-0.0.1-SNAPSHOT.jar &'

깃허브 액션 실행 및 결과 확인

profile
매일 1퍼센트씩 나아지기 ୧(﹒︠ ̫ ̫̊ ̫﹒︡)୨

0개의 댓글