내가 공부하려고 올리는/스프링

Github Actions로 properties 파일 만들어서 배포하기

결딴력 2022. 7. 15. 21:08
반응형

 

✅ 들어가기 앞서


프로젝트를 무중단 배포할 때의 일입니다.

 

properties 파일에 저장한 설정 정보는

대부분 보안과 관련된 정보가 들어있습니다.

 

그래서 이런 properties 파일의 경우

보안 관련 정보가 있는 경우 깃허브에 업로드해서는 안됩니다.

 

하지만 properties가 업로드되지 않은 상태에서

빌드하고 배포하는 경우 오류가 발생합니다.

 

jdbc 관련 설정과 같이

프로젝트 최초 실행 시 불러와야 하는 설정 정보가 없어서

애플리케이션이 실행되지 않기 때문입니다.

 

이 문제를 해결하기 위해

제가 사용한 해결 방식을 오늘 소개해보려고 합니다.

 

 

Github Actions로 properties 파일 만들기


CI/CD Flow

 

우선 제 프로젝트의 CI/CD 흐름도입니다.

 

사용자가 로컬 환경에서 Github에 push 합니다.

push 한 내용은 Github Actions에 의해 빌드되고 AWS S3에 배포됩니다.

 

배포된 내용은 AWS CodeDeploy를 통해 AWS EC2 서버에 옮겨지고

빌드 파일을 통해 애플리케이션이 실행됩니다.

 

오늘은 Github Actions를 통해

빌드 압축 파일에 Properties 파일을 추가해 보겠습니다.

 

우선 이용하려는 깃허브 레파지토리로 이동합니다.

레파지토리에서 'Settings - Secrets - Actions' 순으로 이동합니다.

 

GIthub Settings-Secrets-Actions

 

우측 상단의 'New repository secret'을 클릭합니다.

 

해당 화면에서 만들어야 하는 properties 값을 입력해줍니다.

주의할 것은 해당 VALUE 값은 띄어쓰기나 개행을 인식하지 못합니다.

 

따라서 한 번에 여러 값을 등록하는 것이 아닌

단 하나의 Key, Value 값만 입력해야 합니다.

 

입력 예시

 

 

다음은 yml 파일 작성입니다.

 

레파지토리에서 'Actions - Set up a workflow yourself'를 클릭합니다.

 

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가 생성되는 것을 볼 수 있습니다.

 

생성된 email.properties

 

 

 

반응형