GitHub 레포지토리 설정:
- GitHub 레포지토리에 가서 'Settings' > 'Secrets'로 이동하여 AWS 액세스 키 ID, 비밀 액세스 키, EC2 인스턴스의 IP 주소 및 SSH 키를 시크릿으로 추가한다. 이렇게 하면 이러한 값을 GitHub Actions 워크플로우에서 안전하게 사용할 수 있다.
velog
velog.io
GitHub Actions를 사용하여 AWS EC2 인스턴스에 Spring Boot 애플리케이션을 자동으로 배포하기 위한 워크플로우 파일(deploy.yml)을 생성하고 설정하는 과정은 다음과 같다. 이 예시에서는 master 브랜치의 변경사항을 감지하여 EC2 인스턴스에 배포하는 과정을 담고 있다.
- 워크플로우 파일 생성:
- GitHub 레포지토리의 루트에 .github/workflows 디렉토리를 생성한다.
- 해당 디렉토리 내에 deploy.yml 파일을 생성한다.
- 워크플로우 파일 내용 정의: 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가 자동으로 실행되어 배포 프로세스를 진행한다.
워크플로우가 자동으로 실행되기 위해서는 다음 조건들이 충족되어야 합니다:
- 워크플로우 파일은 .github/workflows 디렉토리 안에 있어야 합니다.
- 워크플로우 파일의 문법이 올바르고 에러가 없어야 합니다.
- 워크플로우를 트리거하는 이벤트(여기서는 master 브랜치에 대한 push 이벤트)가 발생해야 합니다.

'프로젝트 > Pinpoint, Scouter 구축(APM)' 카테고리의 다른 글
| [포팅 메뉴얼] 스카우터(Scouter), 핀포인트(Pinpoint) 설치 가이드 - 1 (0) | 2024.04.05 |
|---|---|
| [포팅 메뉴얼] 스카우터(Scouter), 핀포인트(Pinpoint) 설치 가이드 - 2 (0) | 2024.04.02 |
| [비공개][포팅 메뉴얼] 스카우터(Scouter), 핀포인트(Pinpoint) 설치 가이드 - 1 (2) | 2024.02.01 |
| [Pinpoint - plugin]DB 추적 이슈 : tomcat 서버(Agent)와 DB 서버가 다를 때 (0) | 2024.01.30 |
| flink - java.net.UnknownHostException / 이름 혹은 서비스를 알 수 없습니다. (1) | 2024.01.30 |