[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을 기준으로 실행한다.