쉘 스크립트로 express 자동 배포 해보기

IT공부중·2020년 10월 7일
0

웹 전반

목록 보기
2/7

로컬에서 작업을 하고 git을 사용해 원격 저장소로 push를 한다.
그리고 배포 서버에서 pull을 받아서 다시 배포를 한다.
너무 귀찮은 일이다. 그래서 자동 배포라는 것을 하게 되는데, 이번에 공부하게 되어서 간단하게 쉘 스크립트를 사용하여 자동 배포를 만들어보는 것을 포스팅해본다.

sh 사용하기

일단 자신의 local에서 작업한 express 프로젝트가 github에 push 되어있다고 가정한다.

자신이 원하는 폴더에서 git clone을 한다.
나는 이렇게 만들었다.

그리고 deploy.sh와 같은 쉘 스크립트를 작성한다.

그리고 javascript-w5-accountbook/backend로 이동하여 deploy.sh를 작성하였다. 꼭 이 위치에 할 필요는 없는 것 같다.

위의 cd는 shell만 실행 시킬 때는 필요 없는 코드이지만 나중에 절대경로로 할 때 필요해져서 작성했다.
git fetch를 하여 원격 저장소의 commit을 받아오도록 했다. 그러면 로컬의 현재 HEAD의 마지막 커밋과, origin/J067의 마지막 커밋이 다를 때만 다시 git pull을 해주고, pm2로 배포한 프로젝트를 다시 reload 하게 해주었다.

만약 master로 한다면 J067 대신에 master로 바꿔주면 될 것 같다.

그리고 후에 crontab을 사용하기 위해 권한을 수정해주었다.

chmod +x deploy.sh

bash deploy.sh를 하면 제대로 수행하는 것을 볼 수 있을 것이다. 만약 깃허브 아이디와 비밀번호를 입력하라고 나온다면, 참고하면 좋을 것 같다. 또는 ssh key를 만들어서 해결 할 수도 있다.

crontab 사용

매번 push를 할 때마다 sh를 실행시켜줘야 한다면 sh를 만든 의미가 없다. 그래서 crontab을 사용하여 5분마다 해당 sh을 실행하게 만들어줄 것이다. crontab은 일정 주기마다 명령어를 실행할 수 있게 도와주는 도구이다.

crontab -e

를 입력하면 crontab 설정을 할 수 있다. 나는 아래와 같이 작성했다.

crontab은 별도 쉘에서 실행하기 때문에 환경설정을 해주어야한다. PATH 부분에는

echo $PATH

를 입력하였을 때 나오는 값으로 지정해주었다. 나는 sh 파일을 저기에 만들어두었기 때문에 저렇게 적어주었고 마지막에 2>error.log를 적어주면 에러가 났을 시에 error.log 파일에 로그를 남겨준다. 에러가 없을 시에는 빈 파일로 된다.

*은 각각 시간을 의미하는데 궁금하다면 다른 잘 정리된 블로그를 참고하면 좋을 것 같다. 위 코드는 5분마다이다.

crontab 파일을 수정하고 나서 재시작을 안 해줘도 된다지만 해주는게 더 좋을 것 같아 재시작을 해주었다.

sudo service cron reload

crontab을 사용하면서 주의할 점은, 별도 쉘에서 실행 되기 때문에 echo를 적어도 보이지 않는다는 것이다. 그래서 별도의 파일로 생성하여야 확인이 가능하다. 제대로 실행되는지 확인하려면

echo "check" >> test.txt

이런 식으로 작성하면 좋을 것 같다.

다 하고 나서 local에서 작업 후 git push를 하게 되면 5분마다 검사하여 알아서 배포가 될 것이다.

profile
3년차 프론트엔드 개발자 문건우입니다.

2개의 댓글

comment-user-thumbnail
2021년 2월 17일

필요해서 찾아보던 중인데, repo 이름을 보고 놀랐습니다. :)))
잘 작성해주신 글 덕분에 몇 분 이내로 금방 해낼 수 있었습니다. 감사합니다!
여기다 댓글을 단 줄 알았는데 다른 데에 달렸었네요. ㅋㅋㅋ... 화이팅!

1개의 답글