AI기반의 문제 풀이 추천 서비스 OnePass의 빌드와 배포 자동화를 위한 저장소입니다.
CI/CD 자동화 구현에 대한 자세한 내용은 서버 2대로 CI/CD 자동화 구현하기 (feat. Jenkins, Docker) 에서 확인할 수 있습니다.
AWS의 Free-tier 1기가 용량의 서버로는 빌드와 배포를 모두 자동화하기에 부족해 자동화 작업을 나눠 2대의 서버를 가동했습니다.
금전적인 비용을 절약하기 위해 큰 용량을 필요로 하지 않는 CI 서버는
AWS EC2를 사용하고,
약 7-8개의 서비스를 배포해야 하는 CD 서버는 90일간 300$의 크레딧을 제공해 주는GCP를 사용했습니다.
- CI (
AWS) : 빌드 성공 시 Docker 이미지를 생성해 Docker Hub에 올리고 빌드 파일 삭제 - CD (
GCP) : 사용 중이던 이미지와 컨테이너 삭제 후 Docker Hub에서 새 이미지를 받아와 컨테이너 생성
데이터가 누적되지 않도록 삭제-생성을 반복하는 사이클로 진행됩니다.
AWS EC2: CI 서버Google Cloud Platform VM: CD 서버GitHub: 코드 PUSHJenkins: 자동 BuildDocker: 이미지 생성 및 컨테이너 가동Docker Hub: Docker Image PUSH / PULL
AWS EC2(CentOS)에서 가동GitHub Webhook: main 브랜치의 변경을 추적Jenkins: GitHub의Webhook을 감지해 새로 PUSH한 코드를 가져와 자동 Build 및 Test- Build 실패 시 개발자에게 빌드 결과 이메일 발송 (성공 시 미발송)
Jenkins의Excute Shell에서EC2의 로컬에 있는Shell script를 실행 해Docker Image작성 후Docker Hub에 PUSHCI 서버에서CD 서버의Shell script실행
echo "[COPY JAR]"
cp /var/lib/jenkins/workspace/one-pass/one-pass/build/libs/*.jar /home/centos/jenkins-build/one-pass
echo "[REMOVE OLD IMAGE]"
docker rmi eunsilson/one-pass:latest
echo "[BUILD IMAGE]"
docker build --tag eunsilson/one-pass:latest .
echo "[DOCKER PUSH]"
docker login -u username -p password
docker push eunsilson/one-pass:latest
echo "[SSH SCRIPTS START]"
ssh root@34.64.73.179 sh /home/eunsil1023/jenkins-scripts/scripts.sh
Google Cloud Platform에서 가동DockerDocker Hub: CI 서버에서 만든Docker ImagePULLDocker Image기반으로Container를 생성해 서비스 배포
echo "[STOP OLD CONTAINER]"
docker stop one-pass
echo "[REMOVE CONTAINER]"
docker rm one-pass
echo "[REMOVE IMAGE]"
docker rmi eunsilson/one-pass:latest
echo "[DOCKER PULL]"
docker pull eunsilson/one-pass:latest
echo "[DOCKER RUN]"
docker run -d --name one-pass -p 1111:1111 eunsilson/one-pass:latest
