본문 바로가기

프로젝트/Pinpoint, Scouter 구축(APM)

[Github Action] 배포 환경 구축

GitHub 레포지토리 설정:

  • GitHub 레포지토리에 가서 'Settings' > 'Secrets'로 이동하여 AWS 액세스 키 ID, 비밀 액세스 키, EC2 인스턴스의 IP 주소 및 SSH 키를 시크릿으로 추가한다. 이렇게 하면 이러한 값을 GitHub Actions 워크플로우에서 안전하게 사용할 수 있다.

https://velog.io/@2ast/Github-Github-actions%EC%97%90%EC%84%9C-Secrets%EB%A1%9C-%ED%99%98%EA%B2%BD%EB%B3%80%EC%88%98-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0

 

velog

 

velog.io

 

 

 

GitHub Actions를 사용하여 AWS EC2 인스턴스에 Spring Boot 애플리케이션을 자동으로 배포하기 위한 워크플로우 파일(deploy.yml)을 생성하고 설정하는 과정은 다음과 같다. 이 예시에서는 master 브랜치의 변경사항을 감지하여 EC2 인스턴스에 배포하는 과정을 담고 있다.

  1. 워크플로우 파일 생성:
    • GitHub 레포지토리의 루트에 .github/workflows 디렉토리를 생성한다.
    • 해당 디렉토리 내에 deploy.yml 파일을 생성한다.
  2. 워크플로우 파일 내용 정의: deploy.yml 파일에 다음 내용을 추가한다. 이 스크립트는 기본적인 구조로, 실제 프로젝트 요구사항에 맞게 조정이 필요할 수 있다.

 

name: Deploy to AWS 

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - name: Set up JDK 21
      uses: actions/setup-java@v2
      with:
        java-version: '21'
        distribution: 'adopt'

      # gradlew permission
    - name: Grant execute permission for gradlew
      run: chmod +x ./gradlew
      working-directory: spring # gradle 빌드 파일이 위치한 경로

    - name: Build with Gradle
      run: ./gradlew build
      working-directory: spring # gradle 빌드 파일이 위치한 경로

  deploy:
    needs: build
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2 # GitHub 마켓플레이스에서 제공하는 서드파티 액션

    - name: Copy files to the server
      uses: appleboy/scp-action@master
      with:
        host: ${{ secrets.AWS_INSTANCE_IP }}
        username: ubuntu # 사용자 이름 
        key: ${{ secrets.AWS_PEM_KEY }}
        source: "spring/build/libs/*.jar" #gradle로 생성된 jar file
        target: "path" #jar 파일 선언 위치

    - name: Restart server(not used now, CLI command)
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.AWS_INSTANCE_IP }}
        username: ec2-user
        key: ${{ secrets.AWS_PEM_KEY }}
        # port: 22
        script: |
          ls #CLI 명령어

 

이 스크립트는 크게 build와 deploy의 두 부분으로 나뉜다: 

  • build 작업은 소스 코드를 체크아웃하고, JDK를 설정한 후 Maven을 사용하여 프로젝트를 빌드한다.
  • deploy 작업은 빌드된 JAR 파일을 EC2 서버로 복사하고, 설정된 서비스를 재시작하여 변경사항을 적용한다.

 

 

워크플로우 파일(.yml)을 GitHub 레포지토리의 .github/workflows 디렉토리에 추가하기만 하면, 해당 파일에 정의된 이벤트(예: master 브랜치에 푸시)가 발생할 때 GitHub Actions가 자동으로 실행되어 배포 프로세스를 진행한다.

워크플로우가 자동으로 실행되기 위해서는 다음 조건들이 충족되어야 합니다:

  1. 워크플로우 파일은 .github/workflows 디렉토리 안에 있어야 합니다.
  2. 워크플로우 파일의 문법이 올바르고 에러가 없어야 합니다.
  3. 워크플로우를 트리거하는 이벤트(여기서는 master 브랜치에 대한 push 이벤트)가 발생해야 합니다.