이번에는 엘라스틱 빈스톡과 깃액션을 통해서 ci/cd 설정을 해보겠습니다.
문제1
yml 파일 환경 변수 만들어줄때 여러가지 선택지가 있었습니다.
1. git action에 secret에 변수 하나하나 다 넣어주기
2. git action에 secret에 yml 파일을 base64로 인코딩해서 넣어주기
3. git action에 property로 만들어주기
저는 여러번의 테스트 끝에 2번 방법을 성공했습니다!
---여기는 안읽어도 됨---
1번 방법 실패 이유 :
일단 말이 안됐다. 시크릿에 yml에 설정된 변수들을 다 넣어준다는게 그래서 이건 바로 제꼈다!
3번 방법 실패 이유 :
나는 기존 프로젝트에 yml로 되어있어 property로 바꿔야하는데
application.yml 과 application.property 둘중에 하나만 써야한다. 혼용해서 쓰는게 안된다.
나는 쓴다면 property보단 yml을 쓰고 싶어서 포기했다.
---잡담 끝 ------
해결방법 : Yml 파일을 base64로 인코딩해서 넣어주기
1. yml 파일 내용을 base64로 인코딩
아래의 사이트에서 인코딩할 수 있습니다.
https://www.convertstring.com/ko/EncodeDecode/Base64Encode
Base64로 인코딩 - 온라인 Base64로 인코더
www.convertstring.com
2. 인코딩한 내용을 github action에 secret에 추가
NAME은 사용할 변수 이름을 넣고
Secret는 아까 base64에서 인코딩한 내용을 넣어줍니다.
3. github/workflows/main.yml 작성
배포를 하기위한 실행환경 등을 구성하는 내용입니다.
main.yml에 application-secret.yml을 만들어 준다는 내용도 추가해줍니다.
name: 프로젝트명-webapp
on:
push:
branches: [ "main" ]
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
- name: make application-secret.yml
run: |
cd src/main/resources
touch ./application-secret.yml
echo $시크릿키명 | base64 --decode >> ./application-secret.yml
shell: bash
env:
시크릿키명: ${{ secrets.시크릿키명 }}
- name: Grant execute permission for gradlew
run: chmod +x gradlew # gradle wrapper를 실행할 수 있도록 권한 부여
- name: Build with Gradle
run: ./gradlew clean build # 프로젝트 빌드
- 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}}" # 빌드 완료 시간 출력하기
working-directory: ${{ env.working-directory }}
shell: bash
# gradle build를 통해 만들어진 jar 파일 beanstalk에 배포하기 위한 zip 파일로 만듬
- 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: Beanstalk Deploy
# You may pin to the exact commit or the version.
uses: einaregilsson/beanstalk-deploy@v21
with:
# AWS Access Key
aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
# AWS Secret Key
aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# AWS Region
region: ap-northeast-2
# Beanstalk application name
application_name: 엘라스틱 빈스톡 애플리케이션 이름
# Beanstalk environment name. If empty a version will be created but not deployed anywhere.
environment_name: 엘라스틱 빈스톡 환경 이름
# Version label for new Beanstalk version
version_label: github-action-${{steps.current-time.outputs.formattedTime}}
# Version description for the new Beanstalk version
deployment_package: deploy/deploy.zip
4. ebextensions 생성
최상위 경로에 .ebextensions/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
# run app
killall java
java -Dfile.encoding=UTF-8 -jar $JAR_PATH
5. Procfile 생성
최상위 경로에 Procfile 생성
web: appstart
** .ebextensions, Procfile 경로 참고
이렇게 해서 배포를 잘 마무리 할 수 있었습니다
'AWS' 카테고리의 다른 글
[AWS] Elastic Beanstalk에 https 적용하기 (2) (2) | 2023.01.30 |
---|---|
[AWS] Elastic Beanstalk에 https 적용하기 (1) (0) | 2023.01.29 |
[AWS] Mac EC2 ssh 접속 하기 (0) | 2023.01.26 |
[Nginx] 413 Request Entity Too Large 에러 해결 방법 (0) | 2023.01.15 |
[AWS] Elastic BeansTalk Timezone 설정 (0) | 2023.01.12 |