Search
Duplicate
🧑‍💻

Jenkins 통한 CI/CD 구축 [22.8/Jarvis]

Created
2022/10/06 10:45
Tags
이누쓰데이
날짜

인사말

이누씨 개발팀에서 SEDNv2 백엔드 개발과 PM을 담당하고 있는 @Jarvis 입니다.
SEDNv2의 CI/CD 구축 라는 주제에 대해 공유하려고 합니다.

들어가며

기존 세든, NST 서비스를 개발하고 운영하면서 불편함 을 종종 느꼈습니다.
저뿐만 아니라 개발, 유지보수, 운영파트도 동일하게 느꼈을 것이라고 생각합니다.
세든 버전2를 개발하면서 이를 보완하고 개선하는데 주완점을 두었습니다.

기존 불편했던 점

업데이트시 버전 관리가 안되는 점
이슈사항 → 수정 → 적용 프로세스가 효율적이지 않은 점
빌드파일을 수동으로 배포해서 시간이 소요되는 점

CI/CD 란 무엇인가?

CI (Continuous Integration)

CI는 지속적인 통합(Continuous Integration) 을 의미합니다.
지속적인 통합이란 어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 git 레포지토리에 통합하는 것을 의미합니다.

CI가 필요한 환경은?

다수의 개발자가 형상관리 툴을 공유하며 사용하는 환경

다수의 개발자가 형상관리 툴을 공유하여 작업할 경우, git 레포지토리에는 수많은 commit 들이 쌓이게 됩니다.
그럴 때마다, 기능별로 빌드/테스트/병합을 하려면 번거롭습니다.
이런 상황에서 자동화된 빌드/테스트는 소스코드 충돌을 방지할 수 있습니다.

Micro Service Archietecture 환경

MSA는 작은 기능별로 서비스를 개발하는 형태를 의미합니다.
MSA 환경에서는 대부분 애자일 방법론이 적용되기 때문에 기능 추가가 매우 빈번하게 발생하게 됩니다.
그러한 상황에서 CI의 적용은 기능 충돌 방지 등의 이점이 있습니다.

CD (Continuous Deployment)

CD 지속적인 배포(Continuous Deployment), 지속적인 제공(Continuous Delivery) 를 의미합니다.
지속적인 제공은 git 레포지토리로 자동으로 Release 하는 것,
지속적인 배포는 Production 레벨까지 자동으로 deploy 하는 것을 의미합니다.

sedn CI/CD 프로세스

Jenkins 란?

소프트웨어 개발 시 지속적인 통합(Continuous Integration)과 지속적인 배포(Continuous Delivery)를 제공하는 툴입니다.
이 외에 Trvasi CI, GitLab CI, Jenkins, Circle CI 등 다양한 툴이 존재합니다.

편리한 설정

현업에서 많이 사용하는 서비스와 연동 할 수 있는 다양한 플러그인(aws, kubernetes, jira, slack 등 )을 제공하며, 웹 기반의 대쉬보드를 제공하기 때문에 배포 작업의 상황을 모니터링 할 수 있습니다.

안정적인 빌드/배포 환경

형상관리 툴과 연동하여 코드 변경을 감지하고, 자동화 테스트를 포함한 빌드를 수행하여 소프트웨어 품질을 향상시킬 수 있습니다. 빌드된 결과물을 지속적으로 배포하도록 설정하여 개발 프로세스 전체를 자동화 할 수 있습니다.

Jenkins 화면

CI/CD 적용 결과 및 효과

적용 결과

backend-api, frontend-user, frontend-admin 3개월간 각 각 650~700회의 배포를 수행했습니다. 총 합 1950회~2100회
90일 기준 일평균 7회~7.8회의 배포 수치를 나타냅니다. (3개월간 워킹데이(66일)로 계산시 일평균 약 10회 배포)
수동 배포했을 경우에 1건당 10분의 소요시간이 소요된다는 가정을 했을때 일/70분, 월/35시간 을 단축했습니다.

적용 효과

배포에 소모되는 비용을 줄임으로써 비즈니스 로직에 집중 할 수 있어 소프트웨어 품질 향상
지속적인 통합으로 인해 신규 기능 추가기존 버전의 병합 및 기타 이슈가 없으며 개발, 테스트 용이
요구사항을 신속히 반영하여 유기적으로 업무할 수 있는 시스템 구축

이용 사례

CI/CD는 필수인 시대입니다.

향후 CI/CD의 활용

사실 CI/CD는 DevOps 엔지니어의 룰의 영역입니다.
저희 회사도 언젠간 DevOps 엔지니어가 중요한 시점이 올 것이라 생각합니다. (필요한 시점이 온다면 한 스텝 발전된 것)
DevOps 엔지니어는 프로세스의 통일 및 자동화가 핵심이며 DevOps 엔지니어는 코드, 애플리케이션 유지관리, 애플리케이션 관리를 통합하는 데 중요한 역할을 합니다.
개발 → 지속적인 통합 → 지속적인 배포 → 쿠버네티스 → 기존 서비스 무중단 배포
빌드 시간 개선 및 젠킨스 서버의 다중화
도커허브 및 쿠버네티스 도입

시사점

Move fast and break things - 생각하기보다는 빨리 실행하라
Move fast with stable infrastructure - 빠르게 실행하라, 안정적인 구조 속에서
배포 자동화 프로세스를 통해 빠른 성장을 추구