Jenkins 란 ?

ㅁㄱㅁㄱ·2025년 2월 16일

CI / CD

  • 어플리케이션의 개발부터 배포까지 자동화 해주는 시스템
  • CI ( Continuos Integration )
    • Code : 개발자가 코드를 원격 코드 저장소 (Ex. github repository)에 push하는 단계.
    • Build : 원격 코드 저장소로부터 코드를 가져와 유닛 테스트 후 빌드하는 단계
    • Test : 코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는 지 확인하는 과정
  • CD ( Continous Delivery/Deployment)
    • Delivery
      • 변경된 코드로 빌드, 실제 사용 직전까지 하고 사람이 테스트 혹은 바로 사용을 결정
      • 즉 배포 준비 상태
    • Deployment
      • production 으로 자동으로 실행까지 되는 차이
      • 모든 테스트를 마치고 최종 사용자에게 서비스 제공

Jenkins

  • 자바로 개발 된 애플리케이션

  • Jenkins 는 DB 연동 하지않고 모두 저장 경로 /var/lib/jenkins 저장

    • 따라서, 백업은 파일을 모두 복사하면 완료
    • 단, 용량이 커서 Job 별로 복사해 두는 편
    • /var/lib/jenkins/jobs or ls -l
    • Git Scm 은 Git repo에 JenkinsFile을 빌드하는 방식
  • jenkins 구조

    • jenkins 를 관리하는 서버인 master와 job을 실행하는 파이프라인을 가진 agent로 구성
    • Job은 자식 프로세스로 실행
      • ps aux --forest
    • 즉, 젠킨스는 프로세스로 Job을 수행하고 관리하는 애플리케이션
    • 상황에 따라서 외부 애플리케이션에 위임 ex) 쿠버네티스
  • jenkins 문법

    • 기존엔 freestyle 을 사용했지만 커스텀 불가능, 단방향 구조
    • 최근엔 pipeline script
      pipeline 문법 정리
      pipeline 문법 정리
    • 더 최신 버전인 blue ocean 은 인기가 없음 => 매우 느리다는 단점

    Jenkins 동작 원리

동작 순서

  • SCM
    • Jenkins 코드가 보관되어 있는 Git 저장소에 코드 변경사항을 감지하여 자동으로 파이프라인을 수행 폴링과 웹훅 방식 존재
  • CI
    • 파이프라인이 실행되면 Agent를 통해 파이프라인 스크립트에 정의된 작업이 실행
    • 이 때 빌드, 테스트, 도커 이미지 빌드 등 순차적으로 진행
  • CD
    • 파이프라인에서 정의한 배포 작업에 따라 프로덕션 환경에 배포

SCM (폴링 방식)

  • 설정: Jenkins에서 정기적으로 SCM 시스템을 체크하도록 구성합니다. 이때 체크하는 빈도는 사용자가 설정할 수 있습니다(예: 매 5분).
  • 동작 원리: 설정된 간격마다 Jenkins는 SCM 시스템에 접속하여 최신 변경사항이 있는지 조회합니다.
  • 반응: 변경사항이 감지되면 Jenkins는 연결된 파이프라인을 트리거합니다. 이 때 SCM 시스템에서 최신 코드를 가져와서 사용할 수 있습니다.
  • 실행: 이후의 프로세스는 웹훅 방식과 동일하게, Jenkins가 정의된 파이프라인 스크립트에 따라 작업을 수행합니다.

SCM (웹훅)

  • 설정: SCM 시스템에 Jenkins 서버로 통지할 웹훅을 설정합니다. 이 설정은 보통 SCM의 설정 페이지에서 할 수 있으며, 코드가 푸시되거나 머지 요청이 생성될 때 Jenkins 서버의 특정 URL로 HTTP 요청을 보내도록 구성합니다.
  • 동작 원리: 개발자가 SCM 시스템에 코드를 푸시하면, SCM 시스템은 등록된 웹훅 URL로 요청을 보내 Jenkins에게 알립니다.
  • 반응: Jenkins는 이 HTTP 요청을 받고 연결된 파이프라인 또는 작업을 트리거합니다. 이 요청에는 브랜치, 커밋 ID 등 변경 사항에 대한 정보가 포함될 수 있습니다.
  • 실행: Jenkins는 해당 파이프라인의 스크립트에 따라 빌드, 테스트, 배포 등의 자동화 작업을 수행합니다.

비교

  • 웹훅: 더 즉각적이며 서버 자원을 효율적으로 사용합니다. SCM 시스템에 변화가 있을 때만 Jenkins가 동작하므로 불필요한 체크가 없습니다.
  • 폴링: 웹훅을 지원하지 않는 SCM 시스템에서 유용하며, SCM 시스템에서 웹훅 설정에 제한이 있을 경우 대안이 될 수 있습니다. 그러나 정기적인 체크로 인해 더 많은 서버 자원을 소모할 수 있습니다.

정리

Jenkins를 활용한 CI/CD 시스템은 개발부터 배포까지의 과정을 자동화하여 다음과 같은 이점을 제공합니다:

  • 개발 생산성 향상: 반복적인 빌드, 테스트, 배포 작업을 자동화
  • 안정적인 배포: 자동화된 테스트와 검증을 통해 배포 과정의 안정성 확보
  • 빠른 피드백: 코드 변경사항에 대한 즉각적인 빌드와 테스트 결과 확인 가능

Jenkins는 폴링 방식과 웹훅 방식을 통해 코드 변경을 감지하고, 설정된 파이프라인에 따라 자동으로 빌드부터 배포까지 진행합니다. 특히 파이프라인 스크립트를 통해 유연하고 확장 가능한 CI/CD 환경을 구축할 수 있습니다.

profile
프론트엔드 개발자

0개의 댓글