CICD/Gitlab

crontab과 deploy.sh를 활용한 자동배포

산디딤 2022. 12. 21. 15:17

 

Gitlab에서 pipeline을 만들고 registry가 있는 상태에서 진행한다.

 

1. deploy.sh 편집

관리자 권한에서 진행하므로 /home/ubuntu 디렉토리로 이동후 편집한다.

vim deploy.sh 로 편집

 

#!/bin/bash    
set -ex

# Gitlab에서 빌듣된 docker image 가져옴
docker pull <gitlab container registry image path>:latest | grep "Image is up to date" && pull_status="already_pulled" || pull_status="newly_pulled"

echo $pull_status

# build가 새로되었을 경우 실행
# 기존 container 정지 및 삭제
# 새롭게 container 실행
if [ "$pull_status" = "newly_pulled" ]; then
        docker stop <container_name>
        docker rm -f <container_name>
        docker run -d -p 8080:8080 --name <container_name> -e SPRING_DATASOURCE_URL=jdbc:mysql://<ec2 address>:3306/bbs -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=<mysql password> -e JWT_TOKEN_SECRET=<JWT_TOKEN> <gitlab container registry image path>
        docker image prune -f
fi

 

 

crontab 으로 deploy.sh 실행되도록 설정

crontab -e로 편집

* * * * * sh /home/ubuntu/deploy.sh >> /home/ubuntu/deploy.log

crontab -e 로 편집

1분 단위로 /home/ubuntu 디렉토리의 deploy.sh 가 실행되도록 설정

 

crontab -l 으로 실행중인 crontab 상태를 확인할 수 있다.

 

결과

IDE에서 코드 수정해서 push 하면 Gitlab에서 자동으로 빌드.

위 과정을 통해 새롭게 빌드된 project를 pull image, run container 한다.

45분전에 푸쉬한 내용이 자동으로 빌드 되었다.