CI/CD - CD(Continuous Delivery)

박선규's avatar
May 20, 2024
CI/CD - CD(Continuous Delivery)
 
 

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
 
notion image
 

.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}
 
notion image
 

Prodfile

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

2. AWS 엑세스키, 시크릿 키

notion image
 
aws의 I AM 페이지 들어가기
 
notion image
 
사용자 생성 하기
 
notion image
 
정책 설정 하기 후
 
  • 사용자 생성 → 로그인 가능
  • 액세스 키 만들기 : 외부에서 접근가능하게 외부 프로그램에게 주는 것 : 서드 파티 앱에게 엑세스 키를 제공
 
notion image
 
엑세스 키 생성 후 .csv 파일을 다운 받기. 파일에는 액세스 키와, 시크릿 키가 있다.
 

3. Gitgub에 엑세스 키, 시크릿 키 등록

📌
jwt와 마찬가지로 gitHub에서 발동되기에 gitHub환경 변수에 넣어놔야 한다.
 
notion image
 
  • enter = \n이기에 enter도 치면 안됨
notion image
엑세스 키
  • csv에서 다운받은 것을 넣기 / 여기서만 사용 가능한 환경 변수
 
 
notion image
시크릿키
  • csv에서 다운받은 것을 넣기 / 여기서만 사용 가능한 환경 변수
 
 
notion image
aws에서 생성한 엑세스 키와 시크릿 키를 깃헙에 등록한다.
 
 

4. 사진파일 빌드

 
옛날 사진을 써서 upload 폴더가 아닌 image 폴더임
옛날 사진을 써서 upload 폴더가 아닌 image 폴더임
사진과 같이 사진이 저장 돼있는 폴더를 .jar 파일과 같은 공간에 둔다.
 
notion image
📌
사진이 저장되는 경로는 상대 경로로 해야된다. 절대 경로시 upload 폴더의 위치가 바뀔 때 마다 코드를 수정 해야하기 때문이다.
 

.github/workflows/deploy.yml

cp -r upload deploy/upload
notion image
 
deploy.yml에 upload 폴더를 복사하는 코드도 작성
 
Share article

p4rksk