[Jenkins] Jenkins란?

상트리버·2023년 1월 2일
0

Jenkins

목록 보기
1/1

젠킨스(Jenkins)란?

  • 소프트웨어 개발 시 지속적으로 통합 서비스를 제공하는 툴(CI - Continuous Integration)

  • 다수의 개발자들이 하나의 프로그램을 개발할 때 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유영역에 있는 저장소에 빈번히 업로드함으로써 지속적 통합이 가능

CI/CD란?

  • CI (Continuous Integration) : 여러 개발자들의 코드를 계속해서 통합하는 것
  • CD (Continuous Delivery) : 개발자들이 코드를 계속 작성하면, 사용자 및 내부 사용자들이 계속 쓸 수 있게 만드는 것 → 지속적으로 배포가능한 상태를 유지하는 것

이전의 배포 방식

  1. 코드를 코드저장소에 push

  2. 로컬 환경에서 프로젝트 build

  3. 추출물을 테스트 서버로 전송

  4. 배포 스크립트를 통해 배포

  5. 테스트 진행

  6. 테스트 완료 후 코드저장소 release 브랜치에 push

  7. 버저닝 후 로컬 환경에서 프로젝트 빌드

  8. 추출물을 본 서버로 전송

  9. 배포 스크립트를 통해 배포

  • 문제점

    • 배포의 진행사항, 배포시기, 이슈 등을 수기로 작성하고 개발환경을 프로젝트에 맞게 셋팅해야함

    • 반복되는 push, build, 전송, 배포 등을 하는데에 불필요한 시간이 많이 듦


젠킨스의 자동화 배포

젠킨스를 사용하는 이유

  • 로컬에서 개발한 소스를 수작업으로 서버에 올린 후 쿠버네티스 클러스터에 컨테이너로 배포한다는 것은 말도 안되는 일!
  • BUT, 쿠버네티스 위에 CI/CD pipeline을 만들면 로컬에서 어플리케이션 개발 후 git에 push하면 자동으로 서버 내 쿠버네티스 클러스터에 배포가 됨

젠킨스의 이점

  • 결합 테스트 환경에 대한 배포 작업 실시
  • 정적 코드 분석에 의한 코딩 규약 준수 여부 체크
  • 자동화 테스트 수행
  • 프로젝트 표준 컴파일 환경에서의 컴파일 오류 검출
  • 프로파일링 툴을 이용한 소스 변경애 따른 성능 변화 감시


동적 젠킨스의 장점

확장성

  • 고정된 노드가 아니라 동적으로 Pod를 생성하고 없애기 때문에 작업 부하가 커지면 Pod개수만 늘리면 됌

리소스를 효율적으로 사용 가능

  • 노드가 고정되어있지 않으므로 Jenkins 작업이 없을 때는 다른 작업에 리소스를 사용할 수 있음

클러스터를 관리하기 쉬움

  • 클러스터에 대한 모니터링, 로깅, 운영을 전적으로 쿠버네티스에게 맡길 수 있음
    • 쿠버네티스 : 컨테이너화된 애플리케이션의 자동 디플로이, 스케일링 등을 제공하는 관리시스템
    • 클러스터(Cluster)란? : 컨테이너 형태의 애플리케이션을 호스팅하는 물리/가상 환경의 노드들로 이루어진 집합


동적 젠킨스의 단점

Node 생성 시간이 소요

  • Jenkins 작업을 수행할 때마다 node(pod)를 새로 생성해야 하기 때문에 지연시간이 발생

Node의 수행 결과가 사라짐

  • node에 해당하는 pod는 생성되고 없어짐을 반복한다. 따라서 pod에서 수행한 작업의 결과가 사라지게 된다

디버깅이 어려움

  • pod가 사라질 때 로그도 함께 사라지므로 디버깅이 어려움
  1. 개발자가 개발한 코드를 소스저장소(github, gitlab)에 push
  2. 소스저장소의 WebHooks을 통해 Jenkins이 소스코드를 가져옴
  3. Jenkins에서 테스트, 컨테이너 빌드 등 배포 수행
  4. Docker 저장소에 build, image push 수행
  5. Kubernetes 컨테이너 배포



젠킨스와 쿠버네티스와의 관계

  • 쿠버네티스에 젠킨스를 설치하는 이유
    • 쿠버네티스 환경에서만 동작하는 소스코드가 kube-apiserver와 같은 쿠버네티스 컴포넌트와 상호작용하며 Unit Test를 쿠버네티스 pod에서 실행할 수 있음
    • 젠킨스에서 Volume Mount나 ConfigMap, Secret 등의 쿠버네스 기능을 사용할 수 있음
  • 쿠버네티스와 젠킨스의 관계
    • 앞서 CI/CD pipeline 구성을 말한 것처럼, 젠킨스의 플러그인 중 쿠버네티스의 관련 많은 기능들이 지원되며 쿠버네티스 자동화배포의 최적화 되어있음



젠킨스를 적용한 애자일웍스

  • 스크립트에서 정의한대로 젠킨스이 자동화 빌드를 해줌
  1. 먼저 Checkout을 통해 빌드가능상태인지를 확인함
  2. SpringBoot의 Gradle 빌드를 진행
  3. Docker 빌드를 진행
  4. 쿠버네티스 pod를 생성하고 실행시킴
  • 빌드진행현황

    젠킨스의 Blue Ocean을 통해 빌드 진행 과정을 시각화로 볼 수 있음 현재 빌드를 병렬처리로 진행되어짐

0개의 댓글