본문 바로가기
[DevOps]/CI & CD

젠킨스(jenkins)에 대해 알아보고 무중단 배포 계획을 세워보자

by 황원용 2023. 11. 15.
728x90
💡 사내 프로젝트에 젠킨스를 적용하여 기존의 고전적인 빌드 & 배포 방식에서 벗어나는 과정을 기록하려고 한다.

 

🤔 What is Jenkins?

  • 젠킨스(Jenkins)는 지속적인 통합(Continuous Integration)과 지속적인 배포(Continuous Deployment)를 지원하는 오픈 소스 자동화 도구이다.
  • 소프트웨어 개발 과정에서 개발자들이 작성한 코드를 자동으로 빌드, 테스트, 배포하는 프로세스를 구축할 수 있도록 도와준다.
  • 젠킨스는 다양한 플러그인과 확장성을 제공하여 사용자가 다양한 개발 환경과 요구 사항에 맞게 적용할 수 있다.
  • 이를 통해 소프트웨어 개발 팀은 품질 향상, 개발 생산성 향상, 지속적인 통합 및 배포를 효율적으로 수행할 수 있다.

 

📌 젠킨스의 주요 기능은 다음과 같다:

지속적인 통합: 개발자들이 작성한 코드를 주기적으로 빌드하고, 테스트하여 품질을 유지하며, 버그를 조기에 발견할 수 있다.

지속적인 배포: 빌드된 소프트웨어를 자동으로 배포하여 신속하고 안정적인 배포를 지원한다.

자동화된 테스트: 다양한 테스트 도구와 통합하여 자동화된 테스트를 수행하고 테스트 결과를 보고한다.

확장성: 다양한 플러그인과 통합을 지원하여 젠킨스를 다른 도구와 연동하여 사용할 수 있다.

  • ex ) slack과 연결하여 빌드 성공 실패 여부 알람 보내기 등

모니터링 및 알림: 빌드 및 배포 상태를 모니터링하고, 이상이 발생할 경우 알림을 제공한다.

 

📜 정리

젠킨스는 많은 기업과 프로젝트에서 널리 사용되며, 개발자들의 생산성을 향상하고 소프트웨어 개발 과정을 자동화하여 안정적이고 효율적인 개발을 가능하게 한다.

 

📎 현재 프로젝트 빌드 파일 배포 진행 방식

  • 로컬에서 서버 변경사항 및 추가사항을 적용한다.
  • 로컬에서 각자의 방식으로 테스트를 진행한다.
  • 로컬 PC에서 빌드한 jar 파일을 SFTP 프로그램을 통해 원격 서버로 전송한다.
  • 로컬 PC에서 원격 서버로 SSH 접속을 한다.
  • 원격 서버에서 쉘 스크립트 파일(ex. start.sh) 등을 이용하여 프로젝트 서버를 실행한다.
  • 깃허브로의 PUSH는 별도로 진행한다.

 

🚨 문제점

  1. 현재 배포중인 파일의 버전과 깃허브에 업로드된 버전이 다른 경우가 많아 버전관리가 전혀 되고 있지 않음
  2. 한 번 배포할 때마다 개발자가 해야하는 작업이 많음(시간을 많이 빼앗김)

 

🧑🏻‍🔬 계획중인 Jenkins blue & Green 빌드 파일 배포 방식

  • 로컬에서 서버 변경사항 및 추가사항을 적용한다.
  • 로컬에서 깃허브로 PUSH한다.
  • 깃허브에서 충돌 사항 및 동료 개발자의 체크 후 MERGE 한다.
  • 깃허브의 MERGE 신호를 수신한 젠킨스가 최신 버전의 jar 파일을 빌드한다.
  • 블루가 살아있는지 확인한다.

 

상황 1) 블루 실행 중 → 그린에 배포 후 실행 → 블루 중단

 

if) 블루가 살아있는 경우

  • 그린에 빌드한 최신버전의 jar 파일을 전송하고 실행시킨다.
  • 개발자가 설정한 몇 초의 주기마다 그린 서버가 제대로 실행되었는지 확인한다.
  • 그린 서버가 성공적으로 동작한다면 NGINX에게 프록시 방향을 그린으로 변경하도록 명령한다.
  • 블루 서버의 프로세스를 종료한다.

 

상황 2) 그린 실행 중 → 블루에 배포 후 실행 → 그린 중단

if) 블루가 죽어있는 경우

  • 블루에 빌드한 최신버전의 jar 파일을 전송하고 실행시킨다.
  • 개발자가 설정한 몇 초의 주기마다 블루 서버가 제대로 실행되었는지 확인한다.
  • 블루 서버가 성공적으로 동작한다면 NGINX에게 프록시 방향을 블루로 변경하도록 명령한다.
  • 그린 서버의 프로세스를 종료한다.

 

🙏🏻 기대 효과

  1. 깃허브에 푸시하는 것만으로 모든 배포 과정을 자동으로 처리할 수 있다.
  2. 깃허브와 상용 서버의 배포 버전이 통일된다.
  3. 무중단 배포가 가능해진다.

 

 

 

참고

뤼튼

https://iizz.tistory.com/341

https://hyunminh.github.io/nonstop-deploy/

https://hudi.blog/zero-downtime-deployment-with-jenkins-and-nginx/

 

728x90