-
[📋] dev_deploy 작성 flowProject/Extra 2024. 8. 7. 16:17
GitHub Actions로 무중단 배포 설계하기
개요
GitHub Actions를 사용하여 무중단 배포를 구현할 예정입니다. 본격적으로
dev_deploy
를 작성하기 전에, 어떤 구성 요소를 사용할지 미리 생각해 보는 시간을 가지기 위해 작성한 문서입니다.이론
0. 들어가기 앞서
GitHub Actions는 repository 내부의
.github/workflows
디렉토리에dev_deploy.yml
파일로 작성됩니다. 트리거 조건과 배포 환경도 고려해야 하기 때문에 조건을 간단히 정리합니다.- Trigger 조건:
develop
->main
으로 PR이 closed(=merge)될 때 - OS 환경:
ubuntu-latest
- Language: Java 17
- 빌드 도구: Gradle
1. 사전 설정 작성
이름(name) 정의
name
은 작업의 이름으로, 해당 배포 작업을 구분하기 쉽게 설정합니다.name: Extra Deploy
트리거(trigger) 설정
배포가 진행될 시점을 설정합니다.
on
키워드를 사용하며, 아래 조건을 적용합니다:- PR과 관련된 이벤트에서
main
브랜치의 PR이 closed될 때 - 수동 실행 옵션
on: pull_request: branches: - main types: - closed workflow_dispatch:
해석:
pull_request
이벤트에서main
브랜치에 대한 PR이 closed될 때 실행됩니다.workflow_dispatch
로 수동 실행을 지원합니다.
2. 빌드 조건 작성
jobs
키워드를 사용하여 빌드 조건을 작성합니다.runs-on
으로 OS 환경을 설정하며,steps
에서 작업 단계를 정의합니다.OS 환경 설정
build: runs-on: ubuntu-latest
PR 상태 확인
PR이 정상적으로 merge된 경우에만 작업이 실행되도록 조건을 추가합니다:
build: runs-on: ubuntu-latest if: github.event.pull_request.merged == true
3. 코드 작성
1. 코드 가져오기
GitHub Actions에서 작업을 시작하기 위해 repository의 코드를 가져옵니다. 이를 위해
actions/checkout
을 사용합니다.- name: Checkout uses: actions/checkout@v2
2. Java 설정하기
현재 프로젝트는 Java 17을 사용하므로 JDK 17을 설정합니다.
- name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: 17 distribution: 'adopt'
java-version
: 사용하려는 Java 버전을 지정합니다.distribution
: Java 배포판을 선택합니다.
주요 Java 배포판
adopt
(AdoptOpenJDK): 현재 Eclipse Adoptium으로 변경됨.zulu
(Azul Zulu): 다양한 OS와 클라우드 환경 지원.temurin
: Eclipse Adoptium 프로젝트의 JDK 배포판.oracle
: Oracle 공식 JDK.
3. Gradle로 빌드
Spring Boot 프로젝트이므로 Gradle을 사용하여 빌드합니다.
gradlew
권한을 부여한 후 빌드 작업을 수행합니다:# 권한 부여 - name: Grant execute permission for gradlew run: chmod +x ./gradlew shell: bash # 빌드 실행 - name: Build with Gradle run: ./gradlew clean build -x test shell: bash
4. Deployment Package 지정
배포 패키지를 생성하여 애플리케이션에 필요한 모든 파일과 설정을 포함합니다. 이를 통해 배포를 간소화하고 일관성을 유지할 수 있습니다.
패키지 생성 코드
- name: Generate deployment package run: | mkdir -p deploy cp build/libs/*.jar deploy/application.jar cp Procfile deploy/Procfile cp -r .ebextensions_dev deploy/.ebextensions cp -r .platform deploy/.platform cd deploy && zip -r deploy.zip .
단계별 설명
- 디렉토리 생성:
deploy
디렉토리를 생성합니다. - 애플리케이션 파일 복사: 빌드된 JAR 파일을
deploy
디렉토리로 복사. - Procfile 복사: 실행 구성을 정의하는
Procfile
복사. - 환경 설정 복사: Elastic Beanstalk 및 플랫폼 설정 파일 복사.
- 패키지 압축:
deploy
디렉토리를deploy.zip
파일로 압축.
배포 패키지 사용 이유
- 일관성: 개발 환경과 배포 환경 간 일관성 유지.
- 간소화: 배포 파일을 한 번에 관리.
- 버전 관리: 특정 버전으로 롤백 용이.
- 의존성 관리: 필요한 라이브러리와 설정 포함.
- 보안: 불필요한 파일 배포 환경에서 배제.
5. 파일 전달
S3 + CodeDeploy 또는 Elastic Beanstalk를 사용할지 아직 결정되지 않았으므로, 이 부분은 추후 추가 작성 예정입니다.
참고
'Project > Extra' 카테고리의 다른 글
[📋] Jwt Token 저장 위치 - http header vs cookie (0) 2024.07.27 [회의] BackEnd 4차 회의 (5) 2024.07.24 [📋] WebSocket(1) (0) 2024.07.17 [📋] MariaDB 연동 시도 (1) 2024.07.17 [📋] QR 구현 방안 생각해보기 (0) 2024.07.17 - Trigger 조건: