CD(Continuous Delivery)
- 자동화된 배포 준비: CI 단계가 왼료 된 후, 배포 가능한 상태로 패키징한다.
- 스테이징 배포: 프로덕션(운영 환경)에 직접 배포하기전에, 스테이징 환경에 배포한다. 스테이징은 프로덕션 환경과 거의 동일한 테스트 환경으로 여기서 마지막으로 검증을 수행한다. 이 단계에서 문제가 발생하지 않으면 프로덕션에 배포할 준비를 마친다.
- 수동 승인: 스테이징에서 모든 검증이 완료 됐어도, 실제 프로덕션 배포는 수동 승인을 통해 이루어질 수 있다. 이는 사람이 마지막으로 검토하고, 문제가 없닺는 것을 확인한 후에만 배포를 진행하는 방식이다.
1. AWS 배포를 위한 세팅
.github/workflows/deploy.yml
name: {워크 플로우 이름}
on:
push:
branches:
- master
//master 브랜치에 푸시 이벤트가 발생할 때 이 워크플로우가 트리거.
# https://github.com/actions/setup-java
# actions/setup-java@v2는 사용자 정의 배포를 지원하고 Zulu OpenJDK, Eclipse Temurin 및 Adopt OpenJDK를 기본적으로 지원합니다. v1은 Zulu OpenJDK만 지원합니다.
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: 21
distribution: 'temurin'
- name: Permission
run: chmod +x ./gradlew
- name: Build with Gradle
run: ./gradlew clean build
- name: Deploy packaging
run: |
mkdir deploy
cp build/libs/*.jar deploy/application.jar
cp Procfile deploy/Procfile
cp -r .ebextensions deploy/.ebextensions
cd deploy && zip -r deploy.zip .
# Amazon Elastic Beanstalk에 배포
- name: Deploy to EB
uses: einaregilsson/beanstalk-deploy@v22
with:
aws_access_key: ${{ secrets.AWS_ACCESS_KEY }}
aws_secret_key: ${{ secrets.AWS_SECRET_KEY }}
application_name: bodykey
environment_name: bodykey-env
version_label: ${{ github.run_number }} // GitHub의 실행 번호를 사용
region: ap-northeast-2 // 지역을 서울로 설정
deployment_package: deploy/deploy.zip

.ebextensions/00-makeFiles.config
files:
"/sbin/appstart": //스크립트 파일의 경로
mode: "000755" // 파일의 권한을 설정. 000755는 소유자에게 읽기, 쓰기, 실행 권한을 부여하고, 그룹과 다른 사용자에게 읽기 및 실행 권한을 부여.
owner: webapp
group: webapp
content: |
#!/usr/bin/env bash //이 스크립트가 Bash 셸에서 실행됨을 지정
JAR_PATH=/var/app/current/application.jar //JAR_PATH 변수에 애플리케이션 JAR 파일의 경로를 설정
java -Dspring.profiles.active=prod -Dfile.encoding=UTF-8 -jar ${JAR_PATH}

Prodfile
springapp: appstart // 00-makeFiles.config 의 /sbin/appstart 스크립트와 관련이 있으며, 이 스크립트를 사용하여 Spring Boot 애플리케이션을 특정 환경에서 시작하는 역할
2. AWS 엑세스키, 시크릿 키

aws의 I AM 페이지 들어가기

사용자 생성 하기

정책 설정 하기 후
- 사용자 생성 → 로그인 가능
- 액세스 키 만들기 : 외부에서 접근가능하게 외부 프로그램에게 주는 것 : 서드 파티 앱에게 엑세스 키를 제공

엑세스 키 생성 후 .csv 파일을 다운 받기. 파일에는 액세스 키와, 시크릿 키가 있다.
3. Gitgub에 엑세스 키, 시크릿 키 등록
jwt와 마찬가지로 gitHub에서 발동되기에 gitHub환경 변수에 넣어놔야 한다.

- enter = \n이기에 enter도 치면 안됨

엑세스 키
- csv에서 다운받은 것을 넣기 / 여기서만 사용 가능한 환경 변수

시크릿키
- csv에서 다운받은 것을 넣기 / 여기서만 사용 가능한 환경 변수

aws에서 생성한 엑세스 키와 시크릿 키를 깃헙에 등록한다.
4. 사진파일 빌드

사진과 같이 사진이 저장 돼있는 폴더를 .jar 파일과 같은 공간에 둔다.

사진이 저장되는 경로는 상대 경로로 해야된다.
절대 경로시 upload 폴더의 위치가 바뀔 때 마다 코드를 수정 해야하기 때문이다.
.github/workflows/deploy.yml
cp -r upload deploy/upload

deploy.yml에 upload 폴더를 복사하는 코드도 작성
Share article