깃을 푸시하고, 도커에서 풀하고 실행시키는 과정을 계속해서 반복하기란 너무 번거로운 작업입니다.
해당 작업을 자동화시키기 위해 배포 스크립트 작성 및 크론탭을 이용해보도록 하겠습니다.
배포 스크립트 작성
Xshell에서 배포 스크립트를 만들어 보겠습니다.
먼저 pwd
명령어를 사용해서 현재 위치를 알아봅니다.
vim deploy.sh
를 입력하면 vim 입력창으로 들어가게 되는데, i를 눌러 Insert 모드로 변환한 후 아래의 스크립트를 입력합니다.
#!/bin/bash
set -ex
docker pull registry.gitlab.com/<username>/<repository>:latest | grep "Image is up to date" && pull_status="already_pulled" || pull_status="newly_pulled"
echo $pull_status
if [ "$pull_status" = "newly_pulled" ]; then
docker stop <name>
docker rm -f <name>
docker run -p 8080:8080 --name <name> -e SPRING_DATASOURCE_URL=jdbc:mysql://<cloud db> -e SPRING_DATASOURCE_PASSWORD=<db password> registry.gitlab.com/<username>/<repository>
fi
배포 명령어 참고
pullContent에 해당 레파지토리의 pull 정보를 담고, 해당 변수가 "Image is up to date"라는 정보를 갖고 있다면 exit 합니다.
추가 정보가 담겼다면 배포 과정을 시작합니다.
- run중인 컨테이너를 종료시킵니다.
- run 시킬 때 --name을 사용하여 run 시키는 container의 이름을 지정하는 것이 좋습니다.
- container를 삭제합니다.
- container를 다시 실행시킵니다.
맨 윗줄에 pullContents에서 pull을 진행하므로 추가적으로 pull을 할 필요가 없습니다.
배포 스크립트가 완성되었고, 크론탭을 작성하도록 하겠습니다.
크론탭 작성
배포 스크립트를 완성하고 나서sudo - su
명령어를 사용해서 관리자 모드로 들어갑니다.
crontab -e
명령어를 사용해서 crontab 편집창으로 넘어갑니다.
주기 작성
* * * * *
다섯 칸의 별 모양이 존재하는데
각 별당 분, 시간, 일, 월, 요일을 뜻합니다.
매 분 실행시킬 수 있도록 크론탭을 지정하기 위해* * * * *
을 그대로 입력하면 됩니다.
* * * * * sh /home/ubuntu/deploy.sh >> /home/ubuntu/deploy.log
를 입력하고 ESC 후 Shift + Z + Z를 눌러서 빠져나왔습니다.
deploy.sh를 실행하고, 실행할 때 반환되는 값을 deploy.log에 남겨달라는 의미의 명령어입니다.
작동 확인
sudo 모드에서 logout
명령어를 사용하여 관리자 모드를 빠져나옵니다.
crontab이 1분 뒤에 잘 실행되었다면, deploy.log 파일이 생성되어 있습니다.
해당 파일을 cat deploy.log
명령어를 사용해서 내용을 확인합니다.
크론탭이 deploy.sh를 실행했을 때 git lab을 사용해서 project가 build 되었다면, newly_pull을 진행하면서 배포가 자동으로 진행됩니다.
만약에 이미 pull을 받아 왔고, 새롭게 build 된 데이터가 없다면 already_pulled를 반환할 것입니다.
이어지면 좋은 글
'Server > Infra' 카테고리의 다른 글
[AWS S3] 버킷 생성 (0) | 2023.01.26 |
---|---|
[Docker] Docker Images Tag <NONE> 삭제 자동화 (0) | 2022.12.22 |
[CI/CD] GitLab CI/CD 후 Docker에서 띄우기 (0) | 2022.12.20 |
[AWS] EC2 접속하기 (0) | 2022.12.20 |
[AWS] AWS EC2 Free tier 생성 (0) | 2022.12.20 |