카테고리 없음

GithubAction으로 ECR에 배포해보자

썽연 2023. 5. 14. 20:40
728x90

이번에는 AWS의 ECR에 도커파일을 이용하여 이미지파일을 배포해보는 작업을 해보았다.

작업 시작 전, 작성된 dockerfile과 aws ecr을 필요로한다.

깃허브 레포지토리에 시크릿 변수를 등록을 먼저 해주어야한다.

Setting -> Secrets -> Actions Secrets -> New repository secret

순으로 들어가서 시크릿키를 등록해주자.

AWS_ACCESS_KEY_ID // AWS 사용자 Access key
AWS_SECRET_ACCESS_KEY // AWS 사용자 Secret Access key
ECR_REPOSITORY_NAME // ECR Repository 이름

이제 깃허브 액션 준비는 끝났다.

.github/workflows/deploy.yml

파일을 생성해준다.

깃허브액션 코드를 작성해준다.

이전에 CI / CD 관련 블로그를 작성한 적이 있다.

해당 블로그를 참고하여 yml파일을 작성해준다.

name: ECR Development Deployment

on:
  push:
    branches:
      - main

jobs:  
  deploy: 
    name: Deploy
    runs-on: ubuntu-latest 

    steps:
    - name: Checkout
      uses: actions/checkout@v2

    - 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: ap-northeast-2

    - name: Login to Amazon ECR
      id: login-ecr
      uses: aws-actions/amazon-ecr-login@v1 

    - name: Build, tag, and push image to Amazon ECR
      id: build-image
      env:
        ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
        ECR_REPOSITORY: ${{ secrets.ECR_REPOSITORY_NAME }}
				IMAGE_TAG: ${{ github.sha }}
      run: |
        docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:${IMAGE_TAG} .
        docker push $ECR_REGISTRY/$ECR_REPOSITORY:${IMAGE_TAG}

위와 같이 작성해주었다.

깃허브 액션에서 환경변수는 secrets를 이용하여 접근할 수 있다.

github.sha가 무엇일까 ?

IMAGE_TAG로 gitgub.sha를 작성해주었는데, 이 부분은 깃허브 커밋 해쉬를 말한다.

main에 push 되면서, ECR REPOSITORY에 커밋 해시의 이름을 가진 이미지 파일이 생긴 것을 확인할 수 있었다.

해당 yml파일로 변경하면서, push에 트리거 되는 액션으로 작성하여 코드리뷰를 받았다.

.env 내용 수정만으로 실제 commit과는 별개로 수정할 수 있는 상황에서 무조건 push 액션을 해주어야만 했고, workflow_dispatch를 이용하여 분기를 트리거로 걸어주는 방법에 대해 알아보았다.

워크플로 트리거 이벤트

https://docs.github.com/ko/actions/using-workflows/events-that-trigger-workflows

공식문서에 따르면

on: workflow_dispatch

위 코드를 통해 워크플로를 수동으로 트리거할 수 있다.

해당 코드를 추가하면 깃허브 액션에 버튼이 추가되는 것을 확인할 수 있다.

 

해당 버튼은 workflow_dispatch를 추가하지 않으면 뜨지 않는다.

공식문서에 들어가면, workflow_dispatch 에 사용할 수 있는 추가 작업들이 있어 참고하는 것도 좋은 것 같다.

input의 who를 통해 누가 수동으로 트리거했는지 추가해보았다.

최종 yml파일은 다음과 같다.

name: ECR Development Deployment 

on:
  workflow_dispatch:
    branches: [main]
    inputs:
      name:
        description: 'Who'
        required: true
  push:
    branches:
      - main

   env:
        NEXT_PUBLIC_API_SERVER: ${{ secrets.NEXT_PUBLIC_API_SERVER }}

jobs:  
  deploy: 
    name: Deploy
    runs-on: ubuntu-latest 

    steps:
    - name: Checkout
      uses: actions/checkout@v2

    - name: Create env file
      run: | 
          touch .env
          echo "NEXT_PUBLIC_API_SERVER=$NEXT_PUBLIC_API_SERVER">> .env
   

    - 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: ap-northeast-2

    - name: Login to Amazon ECR
      id: login-ecr
      uses: aws-actions/amazon-ecr-login@v1 

    - name: Build, tag, and push image to Amazon ECR
      id: build-image
      env:
        ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
        ECR_REPOSITORY: ${{ secrets.ECR_REPOSITORY_NAME }}
      run: |
        docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:prod .
        docker push $ECR_REGISTRY/$ECR_REPOSITORY:prod

참고문서

https://kim-dragon.tistory.com/171

https://blog.naver.com/shino1025/222584181885

728x90