티스토리 뷰

728x90
SMALL

 리눅스에서는 원하는 시간마다 특정 명령어를 실행할 수 있게 해주는 크론탭이라는게 존재한다. 이를 이용해서 git에서 pull을 받아오고 만약 받아왔다면 자동으로 받아오고 배포를 할 수 있다. 

vi deploy.sh를 해서 아래와 같이 작성한다.

#!/bin/bash
echo '---cron 실행---'
cd /home/ubuntu/cashbook-03
git fetch origin main
git pull origin main

lastCommit=$(cat /home/ubuntu/last-commit.info)
current=$(git rev-parse origin)

if [[ $current != $lastCommit ]];
then
  echo '---커밋변경 배포절차 실행---'
  echo '---client build---'
  cd ./client
  sudo npm i
  sudo npm run build
  sudo cp -r dist/* /var/www/html/
  sudo service nginx restart

  echo '---server build---'
  cd ../server
  sudo npm i
  sudo npm run build

  echo '---pm2 reload account---'
  sudo pm2 reload all

  # 기존 커밋 덮어쓰기
  echo '---update lastCommit.info---'
  echo $current > /home/ubuntu/last-commit.info
fi

 

위 코드로 lastcommit과 현재커밋을 비교해서 다른경우에만 재배포를 하는것이다. pm2는 클러스터링 모드 reload를 사용해서 무중단배포(? 사실 됬는지 잘 모르겠다)를 했다. nginx는 나중에 찾아봐서 수정하겠다.

 

그리고 crontab-e 를 입력하고 

5 * * * * /home/ubuntu/deploy.sh >> /home/ubuntu/deploy.sh.log 2>&1

이렇게 입력하면 5분에 한번씩 deploy.sh를 실행하고 로그를 deploy.sh.log에 쌓는다. 세부적인 명령어는 생략하겠다. 마지막은 리눅스 명령어고 처음에는 시간을 지정해준느 명령어다.

728x90
LIST
댓글
공지사항