이전글에 이어서 EC2에 자동배포가 될 수 있도록 Github Actions 워크플로우를 작성하겠습니다 원본 소스를 보실려면 여기를 클릭해주세요.
현재 E-Commerce 프로젝트에서 main
배포브랜치에 push
또는 Pull Request
될때 변경된 코드가 자동으로 EC2에 배포되도록 하겠다.
Github Actions 가상 인스턴스환경에서 EC2로 접속하기 위해서는 미리 환경변수를 세팅해놓아야되기 때문에, 필요한 환경벼수부터 먼저 생성해두기로 하자
AWS_PRIVATE_KEY
: EC2 접속을 위한.pem
HOST
: EC2 public IPUSER_NAME
: EC2 접속 네임 New repository secret
버튼을 클릭하여 위의 3개의 변수를 생성한다.name: Deploy to EC2
on: # main브랜치에 push 또는 PR이 날라올때 동작
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
name: build
runs-on: ubuntu-latest
steps:
- name: deploy
# 위의 secret 변수를 설정한 것을 가져와서 세팅
env:
PRIVATE_KEY: ${{ secrets.AWS_PRIVATE_KEY }}
HOSTNAME : ${{ secrets.HOST }}
USER_NAME : ${{ secrets.USER_NAME }}
# 가상인스턴스에서 EC2 접속 후 변경된 소스 가져와서 다시 도커컴포즈 빌드 후 실행
run: |
echo "$PRIVATE_KEY" > private_key && chmod 600 private_key
ssh -o StrictHostKeyChecking=no -i private_key ${USER_NAME}@${HOSTNAME} '
cd /home/ubuntu/e-commerce &&
git checkout main &&
git fetch --all &&
git reset --hard origin/main &&
git pull origin main &&
sudo docker-compose -f docker-compose.prod.yml up -d --build
'
이제 각 기능을 통합한 develop
에서 main
브랜치로 push
하여 자동배포가 되는지 확인해보자.
deploy
잡이 동작하는 모습Github Actions와 branch를 이용해서 각 기능이 통합 되어질 때 자동으로 테스트 및 배포 이루어질 수 있도록 해보았다.
처음에 CI/CD
에대한 이해가 적어 관련 문서 읽는데만 하루가 꼬박 걸렸고, Github Actions
에대한 이해가 적어 설정을 제대로 적용하는 것이 많이 어려웠던 것 같다.
하지만 CI/CD
를 구축해놓으니 코드의 빈번한 수정과 추가가 이루어져도 소프트웨어의 품질을 높일 수 있고 에자일하게 개발할 수 있도록 도움을 많이 줄 수 있어서 많은 공부가 되었고 앞으로 현업에서도 많은 도움이 될 것 같다.