Github Actions로 properties 파일 만들어서 배포하기
✅ 들어가기 앞서
프로젝트를 무중단 배포할 때의 일입니다.
properties 파일에 저장한 설정 정보는
대부분 보안과 관련된 정보가 들어있습니다.
그래서 이런 properties 파일의 경우
보안 관련 정보가 있는 경우 깃허브에 업로드해서는 안됩니다.
하지만 properties가 업로드되지 않은 상태에서
빌드하고 배포하는 경우 오류가 발생합니다.
jdbc 관련 설정과 같이
프로젝트 최초 실행 시 불러와야 하는 설정 정보가 없어서
애플리케이션이 실행되지 않기 때문입니다.
이 문제를 해결하기 위해
제가 사용한 해결 방식을 오늘 소개해보려고 합니다.
✅ Github Actions로 properties 파일 만들기
우선 제 프로젝트의 CI/CD 흐름도입니다.
사용자가 로컬 환경에서 Github에 push 합니다.
push 한 내용은 Github Actions에 의해 빌드되고 AWS S3에 배포됩니다.
배포된 내용은 AWS CodeDeploy를 통해 AWS EC2 서버에 옮겨지고
빌드 파일을 통해 애플리케이션이 실행됩니다.
오늘은 Github Actions를 통해
빌드 압축 파일에 Properties 파일을 추가해 보겠습니다.
우선 이용하려는 깃허브 레파지토리로 이동합니다.
레파지토리에서 'Settings - Secrets - Actions' 순으로 이동합니다.
우측 상단의 'New repository secret'을 클릭합니다.
해당 화면에서 만들어야 하는 properties 값을 입력해줍니다.
주의할 것은 해당 VALUE 값은 띄어쓰기나 개행을 인식하지 못합니다.
따라서 한 번에 여러 값을 등록하는 것이 아닌
단 하나의 Key, Value 값만 입력해야 합니다.
다음은 yml 파일 작성입니다.
레파지토리에서 'Actions - Set up a workflow yourself'를 클릭합니다.
해당 파일에서 다음과 같이 내용을 작성합니다.
name: DoIT-deploy
on:
push:
branches: [main]
permissions:
contents: read
env:
S3_BUCKET_NAME: doit-build-file
PROJECT_NAME: doit
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: Grant execute permission for gradlew
run: chmod +x gradlew
shell: bash
- name: make email_pwd.properties
if: contains(github.ref, 'main')
run: |
echo "ls -a . & pwd"
pwd
ls -a .
echo "mkdir & touch"
mkdir -p ./src/main/resources
cd ./src/main/resources
touch ./email_pwd.properties
pwd
ls -a .
echo "copy properties"
echo $DEV_PROP >> ./email_pwd.properties
cat email_pwd.properties
shell: bash
env:
DEV_PROP: ${{ secrets.EMAIL_PASSWORD }}
//중략
- name: Build with Gradle
run: ./gradlew build
shell: bash
- name: Make zip file
run: zip -r ./$GITHUB_SHA.zip .
shell: bash
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: Upload to S3
run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.zip s3://$S3_BUCKET_NAME/$PROJECT_NAME/$GITHUB_SHA.zip
- name: Code Deploy
run: aws deploy create-deployment --application-name DoIT-CodeDeploy --deployment-config-name CodeDeployDefault.AllAtOnce --deployment-group-name DoIT-CodeDeploy-Group --s3-location bucket=$S3_BUCKET_NAME,bundleType=zip,key=$PROJECT_NAME/$GITHUB_SHA.zip
나머지 내용에 대한 설명은 생략하고
properties 파일을 만드는 중요 명령어를 보겠습니다.
일단 파일 목록을 확인한 후에 './src/main/resources' 폴더로 이동합니다.
해당 폴더가 properties 파일이 있어야 할 경로입니다.
touch 명령어로 0 Bytes 파일을 생성합니다.
필요한 파일 이름에 맞게 적어주시면 됩니다.
아까 저장했던 시크릿 키를 이용해 값을 가져옵니다.
가져온 값은 '>>' 명령어를 이용해 방금 생성한 파일에 추가해줍니다.
다음과 같은 방식으로 빌드하고
AWS CodeDeploy를 통해 빌드 파일을 실행하면
다음과 같이 AWS EC2 서버에 properties가 생성되는 것을 볼 수 있습니다.