목표
1. deploy.yml 생성
2. 00-makeFiles.config 생성
3. deploy파일에 엘라스틱 빈스톡 설정
Java
복사
여기서 설정하는 것들이 엘라스틱 빈 스톡에 던져졌을때,
이 설정에 따라 애플리케이션을 생성하게 된다.
deploy.yml 생성
GitHub 리포지토리에 .github/workflows 디렉토리 생성:
순서
•
최상위 루트에 .github 생성
•
.github 내부에 workflows폴더 생성
•
workflows 내부에 deploy.yml생성
deploy.yml 코드
name: Deploy to Elastic Beanstalk #이 워크플로우의 이름을 지정합니다.
on: # 워크플로우를 트리거하는 이벤트를 지정합니다.
push: # push 이벤트에 의해 트리거됩니다.
branches: # 특정 브랜치에 대한 푸시 이벤트를 감시합니다.
- master # main 브랜치에 푸시될 때 워크플로우가 실행됩니다.
jobs: # 워크플로우에서 실행할 작업을 정의합니다.
deploy: # 작업의 이름을 지정합니다.
runs-on: ubuntu-latest # 작업이 실행될 환경을 지정합니다. 여기서는 최신 우분투 환경을 사용합니다.
steps: # 작업 내에서 수행할 단계를 정의합니다.
- name: Checkout source code # 소스 코드를 체크아웃하는 단계입니다.
uses: actions/checkout@v4 # GitHub Actions의 checkout 액션을 사용하여 리포지토리의 코드를 체크아웃합니다.
- name: Set up JDK 21 # JDK 21을 설정하는 단계입니다.
uses: actions/setup-java@v4 # setup-java 액션을 사용하여 JDK를 설정합니다.
with: # setup-java 액션에 대한 입력 매개변수를 지정합니다.
java-version: 21 # JDK 버전을 21로 설정합니다.
distribution: 'temurin' # JDK 배포판을 'temurin'으로 설정합니다.
- name: Grant execute permission for gradlew # gradlew 파일에 실행 권한을 부여하는 단계입니다.
run: chmod +x ./gradlew # gradlew 파일에 실행 권한을 부여하는 명령을 실행합니다.
- name: Build with Gradle # Gradle을 사용하여 빌드하는 단계입니다.
run: ./gradlew clean build --stacktrace # Gradle을 사용하여 프로젝트를 클린하고 빌드합니다. 빌드 중 문제가 발생하면 스택 트레이스를 출력합니다.
- name: Prepare deployment package # 배포 패키지를 준비하는 단계입니다.
run: | # 여러 명령을 실행합니다.
mkdir deploy # deploy 디렉토리를 만듭니다.
cp build/libs/*.jar deploy/application.jar # 빌드된 JAR 파일을 deploy 디렉토리에 복사하고 이름을 application.jar로 변경합니다.
cp Procfile deploy/Procfile # Procfile을 deploy 디렉토리에 복사합니다.
cp -r .ebextensions deploy/.ebextensions # .ebextensions 디렉토리를 deploy 디렉토리에 복사합니다.
cp -r upload deploy/upload # upload 디렉토리를 deploy 디렉토리에 복사합니다.
cd deploy && zip -r deploy.zip . # deploy 디렉토리로 이동한 후, 그 디렉토리의 모든 파일을 deploy.zip 파일로 압축합니다.
- name: Deploy to Elastic Beanstalk # Elastic Beanstalk에 배포하는 단계입니다.
uses: einaregilsson/beanstalk-deploy@v22 # Elastic Beanstalk 배포를 위한 GitHub Actions의 beanstalk-deploy 액션을 사용합니다.
with: # beanstalk-deploy 액션에 대한 입력 매개변수를 지정합니다.
aws_access_key: ${{ secrets.AWS_ACCESS_KEY }} # AWS 액세스 키를 GitHub Secrets에서 가져옵니다.
aws_secret_key: ${{ secrets.AWS_SECRET_KEY }} # AWS 시크릿 키를 GitHub Secrets에서 가져옵니다.
application_name: ropa # Elastic Beanstalk 애플리케이션 이름을 지정합니다.
environment_name: Ropa-env-1 # Elastic Beanstalk 환경 이름을 지정합니다.
version_label: ${{ github.run_number }} # 배포 버전 레이블을 GitHub 런 번호로 지정합니다.
region: ap-northeast-2 # AWS 리전(ap-northeast-2는 서울 리전)을 지정합니다.
deployment_package: deploy/deploy.zip # 배포할 패키지 파일을 지정합니다.
wait_for_deployment: true # 배포가 완료될 때까지 기다립니다.
recovery_wait_time: 180 # 배포 중 복구 대기 시간을 180초로 설정합니다.
YAML
복사
배포시 환경 설정 파일 생성
폴더 구조
루트 폴더에서 .ebextionsions 패키지 생성후 00-makeFiles.config를 생성한다.
00-makeFiles.config 작성
files:
"/sbin/appstart":
mode: "000755"
owner: webapp
group: webapp
content: |
#!/usr/bin/env bash
JAR_PATH=/var/app/current/application.jar
java -Dspring.profiles.active=prod -Dfile.encoding=UTF-8 -jar ${JAR_PATH}
JavaScript
복사
이 스크립트는 /sbin/appstart라는 파일에 위치한 Bash 스크립트로, Spring Boot 애플리케이션을 실행하는 역할을 합니다.
Procfile파일 루트에 생성
루트 폴더에 Procfile을 생성한다.
Procfile 작성
springapp: appstart
JavaScript
복사