CI/CD를 처음으로 도입해 봤는데 아찔한 경험을 했다. (아찔한 경험을 지금 해서 오히려 다행이다..)
현재 개인프로젝트 중 Next.js가 AWS EC2에 배포되어 있는 프로젝트가 하나 있는데,
지금까지는 그냥 GitHub에 push 후 ssh로 접속하여 [pull -> build -> pm2]를 수행하는 쉘스크립트를 작성해 두고 실행하고 있었다.
그러다가 ssh를 접속하는 과정도 슬슬 귀찮아져서 GitHub Actions를 이용해 보기로 했다.
deploy.yaml에 그냥 main에 소스 코드에 변경을 감지하고 github actions를 이용하여 ssh로 ec2접속 후 위의 과정을 자동으로 진행하도록 작성해 두었다.
문제의 deploy.yaml을 보자.
name: Next.js to EC2
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Install SSH key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.EC2_SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts
- name: Deploy to EC2
run: |
ssh ec2-user@${{ secrets.EC2_HOST }} << 'EOF'
cd ~/frontend
sudo rm -rf ./*
git clone https://github.com/kwonjh0406/seuneuseu-frontend.git .
npm install
npm run build
pm2 stop all
pm2 start npm --name "seuneuseu-app" -- start
처음에 작성 후 일단 돌아갈지 안 돌아갈지 테스트를 해보자는 마인드로 돌렸다.
궁금해서 Actions가 잘 동작하는지 콘솔 로그를 보고 있었는데.. 뭔가 싸한 문구를 봤다.

cd: /home/ec2-user/frontend: No such file or directory
이거 보자마자 뭔가 문제가 있음을 감지했다.
왜냐하면 저거 다음 명령이 sudo rm -rf./*인데, cd에 실패했으니 홈디렉터리를 다 지우게 될 것이다.
예상은 했지만 EC2에 접속하니 홈디렉터리가 다 날아가 있었다..

그래도 뭐 사실 홈 디렉터리에 있던 건 백엔드 빌드 파일이랑 프런트 코드가 전부긴 해서 큰 문제는 없었지만..
혹시나 중요한 파일이 함께 담겨있었다면 상당히 아찔한 상황이 될 뻔했다.
GitHub Actions 코드를 GPT한테 물어보면서 짠 거였는데 생각 없이 갖다 썼다가 발생한 상황인 거 같다.
스크립트를 저렇게 무식한 방식이 아니라 그냥 기존에 내가 작성해 둔 쉘 스크립트처럼 그냥 pull 하고 빌드 후 pm2로 돌리는 코드로 작성하면 되는데, 그냥 CI/CD니까 무슨 일이 생기겠어?라는 안일한 마인드였다.
오늘의 교훈
서버에서 돌아갈 스크립트는 두번, 세번 확인하자..
지금 이런 실수를 해서 천만다행이다 진짜