[Github Action] Github Action으로 배포 자동화 하기 (Docker, ElasticBeanstalk)


프로젝트를 진행하면서 EB를 활용했는데 로컬 환경과 클라우드 환경의 차이로 인해 이슈가 지속적으로 발생하여 계속 삽질을 하다 결국에는 Docker로 빌드하여 해결하였다..

앞으로 같은 이슈가 발생했을 때 참고하기 위해 기록을 남긴다.


Github Action 파일

# .github/workflows/main.yml

name: docker-deploy

on:
  push:
    branches:
      - dev

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1

      # 배포를 하기 위한 zip 파일 생성
      - name: Generate deployment package
        run: zip -r deploy.zip .

      - name: Get timestamp
        uses: gerred/actions/current-time@master
        id: current-time

      - name: Run string replace
        uses: frabert/replace-string-action@master
        id: format-time
        with:
          pattern: '[:\.]+'
          string: "$"
          replace-with: "-"
          flags: "g"

      - name: Beanstalk Deploy for app
        uses: einaregilsson/beanstalk-deploy@v16
        with:
          aws_access_key: $
          aws_secret_key: $
          application_name: application_name
          environment_name: environment_name
          region: region
          version_label: "my-$"
          deployment_package: deploy.zip

      - name: Deployed!
        run: echo App deployed to ELB


Dockerfile

# .github/workflows/main.yml

# node 버전
FROM node:alpine

WORKDIR /usr/app

# package.json package-lock.json 파일 복사
COPY ./package*.json ./

RUN npm install

COPY ./ ./

RUN npm run build

EXPOSE 3000

USER node

CMD [ "npm" , "start" ]

중요한 점이 바로 package-lock.json 파일을 같이 올려줘야 한다는 것이다.

docker를 build할 때 npm install을 진행하는데 package-lock.json을 기준으로 실행한다.