[TIG] 배포 자동화 (using shell)

JEONG KI MIN·2024년 8월 2일

TIG

목록 보기
7/12

우리 서비스는 docker 를 통해 배포를 진행했다. 로컬에서 도커 이미지를 생성하고 이를 도커 허브에 push 한 후, EC2 콘솔에서 pull 받아서 사용하는 방식이었다.

배포 과정

배포를 위해서는 작성된 docker-compose.yml 를 통해 이미지를 생성해야한다. 하지만 이전에 이미 도커를 통해 이미지를 생성하고 실행중인 컨테이너가 있다면 이름이 겹칠 것을 대비해서 이를 삭제 해주고 싶었다. 따라서 다음의 과정을 거쳤다.
다음의 이미지들은 프로젝트를 같이 진행했던 백엔드 팀원분께 설명 드리기 위해 작성했던 내용이다.

위의 과정을 통해 EC2 콘솔에서, 로컬 환경에서의 도커 이미지와 도커 컨테이너를 모두 지워준다. (사실 굳이 삭제 해야 하나 했지만 나중에 이름 겹치고 또 메모리 부족해서 에러나고 그런것 보다는 낫다고 생각해서...)

이제 빌드한 jar 파일을 도커로 띄우는 작업을 한다.

이제 docker hub에 내가 push 한 이미지가 올라 가 있는 걸 볼 수 있다. (docker hub를 먼저 켜두어야 한다.)

이렇게 복잡한 과정을 거쳐서 손배포를 진행했다.

배포 과정 자동화

사실 프로젝트를 시작하면서 바로 CI/CD 를 도입하고자 했지만 CI는 잘 되었으나 CD가 안된다고 하셨었다. 그래서 일단 미뤄두고 개발부터 진행했었다.
위의 과정을 매번 반복하다보니 좀 귀찮았었다. 따라서 자동화 스크립트를 작성해보았다.

shell 파일에 위의 과정을 담아두면 된다..!
일단 로컬에서 도커를 띄우고 push 하는 과정을 담은 local_deploy.sh 파일과 EC2 콘솔에서 pull 하고 실행하는 과정을 담은 remote_deploy.sh 을 작성했다.

local_deploy.sh

코드를 보자.

#!/bin/bash

# 로컬에서 Docker 빌드 및 푸시 스크립트

# 1. 실행 중지 및 삭제
docker ps -a -q | xargs docker rm --force
docker images -q | xargs docker rmi --force

# 2. 빌드 및 푸시
docker-compose -f docker-compose.yml up --build -d
docker push nimikgnoej/tig

# 3. SSH를 통해 EC2 인스턴스에 접속하여 원격 스크립트 실행
ssh -i "/Users/jeong-kimin/Desktop/tig-key-pair.pem" ubuntu@ec2-13-209-131-90.ap-northeast-2.compute.amazonaws.com 'bash -s' < remote_deploy.sh

위의 과정을 하나의 파일에 담은 것 뿐이다.

remote_deploy.sh

#!/bin/bash

# EC2 인스턴스에서 실행할 스크립트

# 1. 실행 중지 및 삭제
docker ps -a -q | xargs docker rm --force
docker images -q | xargs docker rmi --force

# 2. 새로운 이미지 풀 및 실행
docker pull nimikgnoej/tig
docker run -d -p 8080:8080 --env-file ./.env nimikgnoej/tig

local_deploy.sh 를 실행하면 자동으로 remote_deploy.sh 가 EC2 콘솔 내에서 실행되는 것이다.

실행방법

그냥 터미널에서 ./local_deploy.sh 입력!

후기(?)

진작에 만들어둘 걸 그랬다. 그냥 딸깍 한번이면 끝나는 과정을 복잡하게 다 치고 있었다니...!

profile
열심히 해볼게요

0개의 댓글