Skip to content

Team-Rev/One-Pass-CI-CD

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

183 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

One-Pass-CI-CD

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에서 새 이미지를 받아와 컨테이너 생성

데이터가 누적되지 않도록 삭제-생성을 반복하는 사이클로 진행됩니다.



설계 구조

서버_CI_CD_구조

  • AWS EC2 : CI 서버
  • Google Cloud Platform VM : CD 서버
  • GitHub : 코드 PUSH
  • Jenkins : 자동 Build
  • Docker : 이미지 생성 및 컨테이너 가동
    • Docker Hub : Docker Image PUSH / PULL


CI (자동 빌드)

  • AWS EC2(CentOS) 에서 가동
  • GitHub Webhook : main 브랜치의 변경을 추적
  • Jenkins : GitHub의 Webhook을 감지해 새로 PUSH한 코드를 가져와 자동 Build 및 Test
    • Build 실패 시 개발자에게 빌드 결과 이메일 발송 (성공 시 미발송)
    • JenkinsExcute Shell에서 EC2의 로컬에 있는 Shell script를 실행 해 Docker Image 작성 후 Docker Hub에 PUSH
    • CI 서버에서 CD 서버Shell script 실행

CI의 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

Jenkins의 프로젝트 목록




CD (자동 배포)

  • Google Cloud Platform 에서 가동
  • Docker
    • Docker Hub : CI 서버에서 만든 Docker Image PULL
    • Docker Image 기반으로 Container를 생성해 서비스 배포

CD의 Shell Script

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

Docker Hub

About

Jenkins와 Docker를 활용한 빌드+배포 자동화

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors