[SpringBoot + React] 4. GithubActions workflow 생성

울상냥·2023년 4월 5일
0

배포

목록 보기
9/18
post-thumbnail

세번째로 GithubActions workflow를 생성하여야 한다. workflows는 github에 push가 되면 자동으로 프로젝트를 빌드하여 AWS S3에 업로드 하고 AWS CodeDeploy에 배포를 실행하도록 한다!

1. IAM 사용자를 생성하자..

대강 이름설정을 해주고

직접 정책 연결 을 선택하여

AmazonS3FullAccessAWSCodeDeployFullAccess 두가지 권한을 추가해준다.

이전에는 액세스키를 사용자 생성과 동시에 만들수 있었는데 최근에는 보안상 최대한 액세스 키를 만들지 않도록 유도하려는... 의도에서 액세스 키를 별도로 생성해 주어야 한다.

생성한 사용자 > 보안 자격 증명 > 액세스 키 > 액세스 키 만들기 에서

다음과 같이 AWS 외부에서 실행되는 애플리케이션을 선택후

생성된 액세스 키비밀 액세스 키 를 반드시 안전한 곳에 복사해둔다.

2. workflow를 생성하자..

우선 레파지토리의 actions에서 새로운 workflow를 생성해준다.

퍼렇게 써져있는 set up a workflow yourself ->를 눌러주면..

일단은 .github/workflows 경로로 생성해주었다. yml파일명은 알아서 지어주고

SpringBoot 용 yml

name: Deploy String boot

on:
  push:
    branches:
      - main  #main branch에 push 시 동작

env:
  S3_BUCKET_NAME : s3버킷명
  CODE_DEPLOY_APPLICATION_NAME: codedeploy application명
  CODE_DEPLOY_DEPLOYMENT_GROUP_NAME: codedeploy group명

jobs:
  build:
    runs-on: ubuntu-latest
    
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 11 #현재 프로젝트는 자바 11버전을 사용하고 있다.
      
      - uses: actions/checkout@v2
      - run: touch ./src/main/resources/application-security.properties
      - run: echo "${{ secrets.APPLICATION_PROPERTIES }}" > ./src/main/resources/application-security.properties
      #보안 properties파일 생성
      #필요하지 않다면 지워도 됨

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

      - 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-action/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/$GITHUB_SHA.zip
        
      - name: Code Deploy
        run: | 
          aws deploy create-deployment \
          --deployment-config-name CodeDeployDefault.AllAtOnce \
          --application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }} \
          --deployment-group-name ${{ env.CODE_DEPLOY_DEPLOYMENT_GROUP_NAME }} \
          --s3-location bucket=$S3_BUCKET_NAME,bundleType=zip,key=$GITHUB_SHA.zip

gradle 빌드 후 s3에 업로드 하고 code deploy를 동작 시킨다.
보안 properties 파일을 생성하는 과정은 밑에서 자세히..

React용 yml

name: Deploy React

on:
  push:
    branches: main
    
env:
  S3_BUCKET_NAME : s3버킷명


jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout source code
        uses: actions/checkout@master

      - name: Cache node modules
        uses: actions/cache@v1
        with:
          path: node_modules
          key: ${{ runner.OS }}-master-build-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.OS }}-build-
            ${{ runner.OS }}-

      - name: Install Dependencies
        run: yarn

      - name: Build
        run: yarn build
        env:
          CI: ""
          
      - name: Configure AWS credentials
        uses: aws-action/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 \
            --recursive \
            --region ap-northeast-2 \
            build s3://$S3_BUCKET_NAME

프론트는 s3의 정적 웹 호스팅만 필요하기 때문에 빌드 후 s3에 업로드만 하면 끝..!


3. Action secrets 설정

Actions 수행시 보안이 필요한 내용들은 Action secrets에 별도로 저장해두고 가져다 사용해야한다.

해당 레파지토리 > Settings > Security > Secrets and variables > Actions > New repository secret
에서 생성해 주면 된다!

AWS secrets 생성

아까 발급받은 액세스 키비밀 액세스 키를 프론트와 백의 secrets에 생성해 줘야 한다.

yml파일에 작성해 뒀던 대로

  • AWS_ACCESS_KEY_ID : 액세스 키
  • AWS_SECRET_ACCESS_KEY : 비밀 액세스 키
  • AWS_REGION : aws 지역

들을

다음과 같이 각각 생성한다.

properties secrets 생성

Sprint boot 프로젝트에서 보안이 필요한 properties는 application-security.properties의 별도 properties 파일로 관리하고 있다.

이 파일의 내용도 secrets에 추가해주어 Actions 수행시에 application-security.properties가 생성되도록 해주었다.

APPLICATION_PROPERTIES 로 secrets를 생성해 내용에는 application-security.properties의 내용을 복사해 넣어 주었다.


이제 대부분의 세팅은 끝이 났다..!!!!
레파지토리에 푸시후 모든 과정이 정상적으로 동작하는지 확인해 보아야 한다

profile
안되면 되게하라

0개의 댓글