728x90
💡 사내 프로젝트에 젠킨스를 적용하여 기존의 고전적인 빌드 & 배포 방식에서 벗어나는 과정을 기록하려고 한다.
🤔 What is Jenkins?
- 젠킨스(Jenkins)는 지속적인 통합(Continuous Integration)과 지속적인 배포(Continuous Deployment)를 지원하는 오픈 소스 자동화 도구이다.
- 소프트웨어 개발 과정에서 개발자들이 작성한 코드를 자동으로 빌드, 테스트, 배포하는 프로세스를 구축할 수 있도록 도와준다.
- 젠킨스는 다양한 플러그인과 확장성을 제공하여 사용자가 다양한 개발 환경과 요구 사항에 맞게 적용할 수 있다.
- 이를 통해 소프트웨어 개발 팀은 품질 향상, 개발 생산성 향상, 지속적인 통합 및 배포를 효율적으로 수행할 수 있다.
📌 젠킨스의 주요 기능은 다음과 같다:
지속적인 통합: 개발자들이 작성한 코드를 주기적으로 빌드하고, 테스트하여 품질을 유지하며, 버그를 조기에 발견할 수 있다.
지속적인 배포: 빌드된 소프트웨어를 자동으로 배포하여 신속하고 안정적인 배포를 지원한다.
자동화된 테스트: 다양한 테스트 도구와 통합하여 자동화된 테스트를 수행하고 테스트 결과를 보고한다.
확장성: 다양한 플러그인과 통합을 지원하여 젠킨스를 다른 도구와 연동하여 사용할 수 있다.
- ex ) slack과 연결하여 빌드 성공 실패 여부 알람 보내기 등
모니터링 및 알림: 빌드 및 배포 상태를 모니터링하고, 이상이 발생할 경우 알림을 제공한다.
📜 정리
젠킨스는 많은 기업과 프로젝트에서 널리 사용되며, 개발자들의 생산성을 향상하고 소프트웨어 개발 과정을 자동화하여 안정적이고 효율적인 개발을 가능하게 한다.
📎 현재 프로젝트 빌드 파일 배포 진행 방식
- 로컬에서 서버 변경사항 및 추가사항을 적용한다.
- 로컬에서 각자의 방식으로 테스트를 진행한다.
- 로컬 PC에서 빌드한 jar 파일을 SFTP 프로그램을 통해 원격 서버로 전송한다.
- 로컬 PC에서 원격 서버로 SSH 접속을 한다.
- 원격 서버에서 쉘 스크립트 파일(ex. start.sh) 등을 이용하여 프로젝트 서버를 실행한다.
- 깃허브로의 PUSH는 별도로 진행한다.
🚨 문제점
- 현재 배포중인 파일의 버전과 깃허브에 업로드된 버전이 다른 경우가 많아 버전관리가 전혀 되고 있지 않음
- 한 번 배포할 때마다 개발자가 해야하는 작업이 많음(시간을 많이 빼앗김)
🧑🏻🔬 계획중인 Jenkins blue & Green 빌드 파일 배포 방식
- 로컬에서 서버 변경사항 및 추가사항을 적용한다.
- 로컬에서 깃허브로 PUSH한다.
- 깃허브에서 충돌 사항 및 동료 개발자의 체크 후 MERGE 한다.
- 깃허브의 MERGE 신호를 수신한 젠킨스가 최신 버전의 jar 파일을 빌드한다.
- 블루가 살아있는지 확인한다.
상황 1) 블루 실행 중 → 그린에 배포 후 실행 → 블루 중단
if) 블루가 살아있는 경우
- 그린에 빌드한 최신버전의 jar 파일을 전송하고 실행시킨다.
- 개발자가 설정한 몇 초의 주기마다 그린 서버가 제대로 실행되었는지 확인한다.
- 그린 서버가 성공적으로 동작한다면 NGINX에게 프록시 방향을 그린으로 변경하도록 명령한다.
- 블루 서버의 프로세스를 종료한다.
상황 2) 그린 실행 중 → 블루에 배포 후 실행 → 그린 중단
if) 블루가 죽어있는 경우
- 블루에 빌드한 최신버전의 jar 파일을 전송하고 실행시킨다.
- 개발자가 설정한 몇 초의 주기마다 블루 서버가 제대로 실행되었는지 확인한다.
- 블루 서버가 성공적으로 동작한다면 NGINX에게 프록시 방향을 블루로 변경하도록 명령한다.
- 그린 서버의 프로세스를 종료한다.
🙏🏻 기대 효과
- 깃허브에 푸시하는 것만으로 모든 배포 과정을 자동으로 처리할 수 있다.
- 깃허브와 상용 서버의 배포 버전이 통일된다.
- 무중단 배포가 가능해진다.
참고
뤼튼
https://hyunminh.github.io/nonstop-deploy/
https://hudi.blog/zero-downtime-deployment-with-jenkins-and-nginx/
728x90
'[DevOps] > CI & CD' 카테고리의 다른 글
로컬에서 젠킨스로 블루/그린 무중단 배포 테스트하기 (3) - 젠킨스 파일 작성, 배포 테스트 진행 (3) | 2023.11.27 |
---|---|
로컬에서 젠킨스로 블루/그린 무중단 배포 테스트하기 (2) - 쉘 스크립트 배포 파일 작성 (1) | 2023.11.25 |
로컬에서 젠킨스로 블루/그린 무중단 배포 테스트하기 (1) - 젠킨스 설치, 스프링 부트 서버 세팅 (0) | 2023.11.24 |
로컬 환경에서 도커 젠킨스(Jenkins) 컨테이너로 깃허브 레파지토리 클론 테스트하기(with Ngrok) | 로컬 젠킨스 설명 포함 (2) | 2023.11.18 |