본문 바로가기

AWS

AWS-V5(CI/CD 배포) 10 배포하기

배포하기

  • region 확인
  • environment_name 확인
  • application_name 확인

 

 

10-1 deploy.yml 파일은 github action에서 활용되는 파일

name: aws-v5
on:
  push:
    branches:
      - main 

# actions/setup-java@v2는 사용자 정의 배포를 지원하고 Zulu OpenJDK, Eclipse Temurin 및 Adopt OpenJDK를 기본적으로 지원합니다. v1은 Zulu OpenJDK만 지원합니다.
jobs: #어떤 임무를 할것인지 적는다.
  build: # 마음대로 적어도됨.
    runs-on: ubuntu-18.04 #키워드이다.
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 11
      - name: Grant execute permission for gradlew
        run: chmod +x ./gradlew
        shell: bash
      - name: Build with Gradle
        run: ./gradlew clean build
        shell: bash
    # UTC가 기준이기 때문에 한국시간으로 맞추려면 +9시간 해야 한다.
      - name: Get current time
        uses: 1466587594/get-current-time@v2 
        id: current-time
        with:
          format: YYYY-MM-DDTHH-mm-ss
          utcOffset: "+09:00"
      - name: Show Current Time
        run: echo "CurrentTime=${{steps.current-time.outputs.formattedTime}}"
        shell: bash

      EB에 CD 하기 위해 추가 작성
      - name: Generate deployment package
        run: |
          mkdir -p deploy
          cp build/libs/*.jar deploy/application.jar
          cp Procfile deploy/Procfile
          cp -r .ebextensions deploy/.ebextensions
          cd deploy && zip -r deploy.zip .
      - name: Deploy to EB
        uses: einaregilsson/beanstalk-deploy@v20
        with:
          aws_access_key: ${{ secrets.AWS_ACCESS_KEY }}
          aws_secret_key: ${{ secrets.AWS_SECRET_KEY }}
          application_name: aws-v5 # 엘리스틱 빈스톡 애플리케이션 이름!
          environment_name: Awsv5-env # 엘리스틱 빈스톡 환경 이름!
          version_label: aws-v5-${{steps.current-time.outputs.formattedTime}}
          region: ap-northeast-2 # 서울 ap-northeast-2 버지니아북부 us-east-1
          deployment_package: deploy/deploy.zip

 

10-2. 프로젝트/.ebextensions/00-makeFiles.config 생성

00-makeFiles.config 파일은 EB에서 활용되는 파일

파일을 여러개 만들 수 있는데, 파일 실행 순서는 00, 01, 02 이런순으로 실행된다.

뒤에 이름은 자유롭게 만들면 되고, 확장자는 config 고정이다.

files:
    "/sbin/appstart":
        mode: "000755"
        owner: webapp
        group: webapp
        content: |
            #!/usr/bin/env bash
            JAR_PATH=/var/app/current/application.jar

            # run app
            java -Dspring.profiles.active=prod -Dfile.encoding=UTF-8 -jar $JAR_PATH

로그를 남기려면 nohup으로 실행해주자.

 

 

10-3. 프로젝트/Procfile 생성

Procfile은 jar파일을 실행하기 위해서 EB에서 활용되는 파일

springapp: appstart

 

push가 시작하는 순간 외곡?이 트리거 된다.

외곡이 트리거에서 deploy.yml을 읽는다.

deploy.yml이 os를 설치하고 스텝들을 실행한다

스텝들이 끝나면 deploy.zip파일을 만들어서 던진다.

 

 

1. deploy.zip 파일에 application.jar, .ebextensions, Procfile 을 압축한다.

2. deploy.zip 파일을 EB에 전송한다.

3. EB는 deploy.zip의 압축을 푼다.

4. 압축이 풀리면 자동으로 내부 파일들이 /var/app/current 로 이동된다.

5. .ebextensions/00-makeFiles.config 파일이 실행되면서 /sbin/appstart 파일이 생성되고

해당 00-makeFiles.config는 삭제된다.

6. Procfie이 실행된다.