230323 TIL #40 Github Actions + Elastic Beanstalk = CI/CD

김춘복·2023년 3월 22일
0

TIL : Today I Learned

목록 보기
40/571

230323 Today I Learned

미니프로젝트 마지막날.

CI / CD

Github Actions + Elastic Beanstalk

  • 3일 내내 CI/CD와 싸웠다. 이틀은 S3에 codeploy로 하려다가 실패했고 마지막날은 Elastic Beanstalk로 하려다가 긴 실패끝에 겨우 성공했다.

  • 사실 코드 자체는 어렵지 않았다. 하지만 Github에 public으로 자료를 올리는 과정에서 Application.properties에 있는 DB 자료를 숨기려다 보니까 Github Secrets에 등록해서 쓴 주소가 제대로 작동하지 않는 에러때문에 계속 실패를 했다.

  • 일단은 github에 그대로 노출되게 push를 해서 구현에 성공을 하긴 했다.

  • main.yml 코드


name: Spring Boot & Gradle CI/CD

on:
  push:
    branches: [ "master" ]


permissions:
  contents: read

jobs:
  build:

    runs-on: ubuntu-latest

    steps:

#     properties를 통째로 secret에 등록해서 사용하려다가 실패. 제대로 인식 못함
#    - name: Set up environment variables
#      env:
#        APPLICATION_PROPERTIES: ${{ secrets.APPLICATION_PROPERTIES }}
#      run: echo "${APPLICATION_PROPERTIES}" > ./src/main/resources/application.properties
#    - name: Verify the contents of the application.properties file
#      run: cat ./src/main/resources/application.properties

    - uses: actions/checkout@v3
    - name: Set up JDK 17
      uses: actions/setup-java@v3
      with:
        java-version: '17'
        distribution: 'temurin'


    - name: Grant execute permission for gradlew
      run: chmod +x gradlew
      shell: bash

    - name: Build with Gradle
      run: ./gradlew clean build
      shell: bash

    - name: Get current time
      uses: 1466587594/get-current-time@v2
      id: current-time
      with:
        format: YYYY-MM-DDTHH-mm-ss
        utcOffset: "+09:00"


      # 전송할 파일을 담을 디렉토리 생성 및 압축파일 형태로 전달
    - 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_ID }}
        aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        application_name: mini
        environment_name: Mini-env
        version_label: github-action-${{steps.current-time.outputs.formattedTime}}
        region: ap-northeast-2
        deployment_package: deploy/deploy.zip
  • Procifile
web: appstart
  • .ebextensions/00-makeFiles.config
files:
    "/sbin/appstart" :
        mode: "000755"
        owner: webapp
        group: webapp
        content: |
            #!/usr/bin/env bash
            JAR_PATH=/var/app/current/application.jar

            # run app
            killall java
            java -Dfile.encoding=UTF-8 -jar $JAR_PATH
  • 이렇게 구성해서 배포가 되는 것 까진 확인했다.
    하지만 Elastic Beanstalk에서 자꾸 환경이 '심각'으로 뜨는 점과 db정보를 결국 못숨겼다는 점에서 아쉬움이 따른다. 다음번 프로젝트때는 좀 더 깔끔하게 구현하도록 해봐야겠다.

  • actions 실패 내역


elastic beanstalk에서 환경변수 설정

profile
Backend Dev / Data Engineer

0개의 댓글