저번 시간에 docker-compose.yml 파일을 어떻게 구성할 지에 대해서 알아보았다.
이번엔 이 백엔드 서버와 db 서버를 클라우드 환경에 띄우는 방법을 알아보겠다.
예전 포스트에서 Jenkins를 이용한 자동화 배포를 구성한 적이 있었는데, 이 Jenkins를 이용해서 .env파일을 안전하게 복사하고 배포하는 방법을 알아보겠다.
Jenkins 관리 > Credentials로 들어가서 secret file로 하나 생성하자
파일 선택에서 만들어 놨던 .env파일을 붙여넣은 후, ID와 Description에 ENV_FILE이라고 적어두자.
Jenkins가 Docker 컨테이너안에 실행되고 있을텐데, jenkins가 docker-compose 명령어를 실행하기 위해서는, 이 컨테이너 안으로 접속하여 docker-compose를 설치해 주어야 한다.
docker exec -it [containerID] /bin/bash
apt-get update && apt-get install -y curl
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
이후 홈 화면에서 새로운 Item > Freestyle project를 누르고, 적절한 이름을 만든다.
이후에는 이전 포스트와 비슷하니 따라서 해보도록 하자.
중간에 Use secret text(s) or file(s)에서 아까 Credentials에 저장해놨던 Secret file을 올려보자
shell script는 Build Steps에서 Execute shell을 눌러 다음과 같이 구성하자!
# 대문자 'CD'면 안됨!
cd backend/payment
chmod +x ./gradlew
./gradlew build
cp ${ENV_FILE} .env
# 이미 실행중인 동일한 이미지가 있으면 중지
CONTAINER_ID=$(docker ps -q --filter "publish=8300")
if [ ! -z "$CONTAINER_ID" ]; then
docker-compose down payment-service
docker-compose up -d payment-service
else
docker-compose up -d
fi
ENV_FILE을 루트 디렉토리 상에 복사해주고 빌드를 시켜버리는 것이다!
만약 백엔드 서버가 실행되고 있지 않다면 백엔드 서버와 db까지 모두 클라우드 환경에 새롭게 올리는 것이고, 이미 서버가 있다면 백엔드 서버를 업데이트하는 방식으로 구성해주자.
이렇게 db서버와 백엔드 서버를 모두 클라우드 환경에 띄울 수 있게 되었다!