We are Architect

젠킨스로 배우는 CICD 파이프라인: 젠킨스 소개(2) 본문

CI & CD/Jenkins

젠킨스로 배우는 CICD 파이프라인: 젠킨스 소개(2)

the best infra 2024. 12. 20. 23:17

 

* 젠킨스란? 

  • 젠킨스라는 이름은 충실한 하인 이라는 뜻으로 언제든지 시종 받고 일을 수행할 수 있게 준비된 사람이라는 뜻이다. 
  • 코드를 통합하고 테스트하고 빌드하고 서버에 배포까지의 프로세스를 도와주는 도구이다.
  • CI/CD 프로세스를 자동화하여 생산성을 높여준다.
  • 젠킨스는 오픈소스이며 무료이고 서버로 동작시켜야 한다.
  • 젠킨스는 아파치 톰캣처럼 서블릿 컨테이너 내부에서 실행되는 서버 시스템이다. 자바로 만들어졌고 다양한 SW개발 도구를 지원한다.
    • 아파치 톰캣 :  Java 웹 애플리케이션을 실행하기 위한 서버 소프트웨어.
      아파치 톰캣 로
    • 서블릿 :  Java로 작성된 웹 애플리케이션에서 HTTP 요청을 처리하고 응답을 생성하는 자바 클래스.
    • 서블릿 컨테이너 : 서블릿과 JSP를 실행하고 관리하는 런타임 환경. 
  • 애자일 방법론에 가장 적합하게 고객에 사항에 맞게 바로 반영하고 테스트하고 배포까지 해서 결과까지 도출하게 돕는 효율적인 도구 중 하나이다.
  • 젠킨스는 상황에 따라 단위 테스트 도구로 실행해서 단위 테스트를 수행한다.
  • 젠킨스는 다양한 플랫폼에서 애플리케이션을 빌드 할 수 있고 넥서스(중앙 집중식으로 산출물을 저장하는 저장소) 같은 아티팩트 리포지터리에 산출물을 발행하고 통합 절차도 자동화할 수 있다.
  • 젠킨스는 단위 테스트, 테스트용 프레임 워크, 컨테이너 테스트 등 고품질 빌드를 생성한다.  

 

 

* 젠킨스의 역사

  • 젠킨스를 만든 사람은 코스케 카와구치라는 사람이다.
  • 원래는 '허드슨' 이라는 이름으로 썬 마이크로시스템즈에서 만들어졌지만 오라클이 해당 회사를 인수하면서 따로 나온 프로젝트 이름이 '젠킨스'이다.
  • 젠킨스의 커뮤니티와 생태계가 너무 커져서 현재 허드슨은 없어졌고 젠킨스만 남아 있다.

 

 

* 젠킨스를 이용한 CI/CD 구현

  • 젠킨스 자동화 서버는 도메인 특화 언어(DSL)로 이러한  빌드 수명 주기 단계를 구축한다.
    • DSL : DSL은 특정한 문제를 해결하거나 작업을 수행하기 위해 설계된 전문 도구 같은 언어.
  • 젠킨스는 방대한 규모의 플러그인을 제공하고 있기 때문에 어떤 애플리케이션에 대해서도 E-E 빌드 수명 주기 단계를 구현할 수 있다.
    • E-E 빌드 : End-to-End Build Lifecycle의 약자로 프로그램을 만들면서 빌드, 테스트, 배포하는 과정을 체계적으로 설명한다.
  • 젠킨스은 파이프라인 이라는 스크립트를 작성할 수 있으며 이를 사용해 각 빌드 단계마다 젠킨스가 수행할 테스크 및 하위 테스크의 순서를 정의한다. 
  • 빌드 단계를 이전 단계의 결과가 다른 단계의 입력으로 주어지는 방식으로 순차적으로 이뤄진다. 
  • 만약 빌드 프로세스를 진행하는 중 특정 단계에서 실패가 발생하면 다음 단계가 실행되지 않고 빌드 프로세스 전체가 실패한다. 

 

 

* 젠킨스의 아키텍처 

  • 일반적인 젠킨스의 CI/CD 프로세스는 다음과 같다.
    1. 다수의 개발자가 각자 브랜치에서 변경작업을 한 후 리포지터리에 psuh. 코드 리뷰한 후에 각자의 코드를 병합.
    2. 브랜치의 변경 사항이 젠킨스에 통보.
    3. 젠킨스가 통보를 수신하면 젠킨스 작업 시작. 
  • 젠킨스 작업이란 파이프라인 내에서 특정 작업이나 실행 단계를 정의한 구성 요소 작업.
    1. 소스 코드 관리 시스템에 맞는 플러그인을 사용해 리포지터리에서 변경된 값을 가져온다.
    2. 메이븐 같은 빌드 도구와 관련 젠킨스 플러그인을 사용해 변경된 파일을 컴파일한다.
    3. 빌드 도구를 재사용해 컴파일된 코드의 단위/통합 테스트를 실행한다.
    4. 정적 분석 도구를 실행해 코딩 표준을 준수하는지와 데드 코드가 있는지 확인한다. 정적 분석 도구로는 소나큐브 등을 사용한다.
    5. 컴파일과 테스트 완료된 파일들을 .jar 또는 .war 같은 라이브러리 형태로 번들링(파일을 묶는 것)한다. 이 과정도 젠킨스 플러그인으로 실행되는 빌드 도구를 사용한다.
    6. 빌드된 라이브러리 파일을 테스트/프로덕션 환경으로 배포한다.
    7. E-E 테스트 자동화 도구(셀레늄, 프르트랙터 등)를 사용해 배포된 애플리케이션을 대상으로 테스트를 실행한다.
      • 셀레늄 : 브라우저 자동화 도구로, 주로 웹 애플리케이션을 테스트하기 위해 사용.
        셀레늄 로고
      • 프르트랙터 : 기타 웹 애플리케이션 테스트를 위한 자동화 도구.
    8. 새로 생성된 애플리케이션의 상태와 E-E 테스트 결과가 포함된 이메일을 프로젝트 팀원들에게 전송한다.
  • 젠킨스는 빌드과정에서 오류가 나면 해당 단계에서 실패를 하여서 여러 단계를 나눠서 부분마다 검증을 하고 빌드를 완료시킨다. 그리고 문제가 없을 경우에만 다음 빌드 단계로 넘어가고 테스트하여 프로젝트의 완성을 돕는다.