내 잡다한 노트

Declarative pipeline과 Scripted pipeline의 비교 본문

DevOps/Jenkins

Declarative pipeline과 Scripted pipeline의 비교

peanutwalnut 2024. 12. 13. 17:11

1. Declarative Pipeline

장점

  1. 가독성
    • 구조화된 문법을 사용하므로 코드가 직관적이고 읽기 쉬움.
    • 정해진 구문(pipeline, stages, steps) 덕분에 초보자도 쉽게 이해 가능.
  2. 에러 방지
    • Jenkins에서 선언형 문법을 강제하기 때문에 문법 오류를 줄일 수 있음.
    • Jenkins의 자동 완성 및 구문 검증 기능과 잘 연동됨.
  3. 표준화
    • 팀 간에 파이프라인 작성 방식이 일관될 수 있음.
    • 반복 가능한 작업에 적합.
  4. 내장 기능
    • post 블록과 같은 후처리 단계(always, success, failure)를 기본 제공.
    • agent 설정, 환경 변수(environment) 선언이 간단.

단점

  1. 제한된 유연성
    • 복잡한 조건 분기나 동적인 작업에는 적합하지 않음.
    • 특정한 로직을 구현하려면 Scripted Pipeline으로 전환하거나, Groovy 스크립트를 혼용해야 함.
  2. 특정 작업 구현 어려움
    • 병렬 작업에서 동적 처리가 필요하거나, 서버별로 다른 작업을 수행해야 할 경우 구현이 번거로움.

2. Scripted Pipeline

장점

  1. 유연성
    • Groovy 스크립트의 모든 기능을 사용할 수 있어 복잡한 로직 구현 가능.
    • 동적으로 작업을 생성하거나 조건문(if, for)을 활용한 작업 처리에 적합.
  2. 맞춤형 처리
    • 선언형 파이프라인에서 다룰 수 없는 작업도 쉽게 처리 가능.
    • 특정 상황에 맞는 로직을 자유롭게 작성 가능.
  3. 공유 라이브러리와 통합
    • 공유 라이브러리와 결합하여 확장성 높은 파이프라인 작성 가능.

단점

  1. 가독성 낮음
    • 자유도가 높아지면서 코드가 복잡하고 읽기 어려울 수 있음.
    • 팀 간 작성 스타일이 달라질 위험이 있음.
  2. 문법 오류 가능성
    • Groovy 스크립트 문법에 익숙하지 않으면 오류를 만들기 쉬움.
    • Jenkins에서 제공하는 구문 검증이나 자동 완성 기능이 덜 효과적.
  3. 유지보수 어려움
    • 복잡한 로직으로 인해 파이프라인 수정 및 디버깅이 어려울 수 있음.

선택 기준

Declarative Pipeline가 적합한 경우

  1. 단순하고 표준화된 작업
    • Docker 이미지 빌드 및 푸시.
    • 테스트 실행 후 결과 보고.
    • CI/CD 과정이 간단한 프로젝트.
  2. 팀 간 협업
    • 일관성 있고 가독성이 높은 파이프라인 작성이 필요한 경우.
  3. 초보자 친화적 환경
    • Jenkins와 파이프라인 작성에 익숙하지 않은 팀원과 협업할 때.

Scripted Pipeline이 적합한 경우

  1. 복잡한 로직이 필요한 작업
    • 동적으로 작업을 생성하거나 조건에 따라 분기 처리해야 할 때.
    • 병렬 작업에서 각 작업에 서로 다른 로직이 필요한 경우.
  2. 맞춤형 처리 필요
    • Jenkins의 기본 기능 외에 특정 요구사항을 구현해야 할 때.
    • 여러 서버에서 다른 명령어를 실행하거나 유동적인 환경을 처리해야 할 때.
  3. 고급 사용자
    • Groovy에 익숙하고, 복잡한 파이프라인 작성이 가능한 경우.

추천

  1. 단순한 CI/CD 파이프라인
    • Docker 이미지 빌드, 단순 테스트, 레지스트리 푸시 등 간단한 작업은 Declarative Pipeline 사용을 추천합니다.
    • 예:
      • 단일 프로젝트에서 반복되는 빌드-테스트-배포 작업.
      • 팀 간 협업이 많아 가독성이 중요한 경우.
  2. 복잡한 환경 제어 및 서버 관리
    • 여러 서버를 관리하거나, 작업 흐름이 동적으로 변하는 경우에는 Scripted Pipeline이 적합합니다.
    • 예:
      • 서버별 초기화 작업.
      • 조건에 따라 동작이 크게 달라지는 파이프라인.
  3. 혼합 사용
    • 대부분의 경우 Declarative Pipeline을 기본으로 사용하고, 복잡한 로직이 필요한 부분만 script 블록으로 Scripted 스타일을 섞어 사용하는 것도 좋은 방법입니다.

'DevOps > Jenkins' 카테고리의 다른 글

Jenkins의 Organization Folers  (0) 2024.12.16
Jenkins의 Scripted Pipeline에선 Groovy만 되는건가요?  (0) 2024.11.27
Jenkinsfile 이란?  (0) 2024.11.27
Jenkins New item 페이지  (0) 2024.11.24
Jenkins agent  (0) 2024.11.24