내 잡다한 노트
peanutwalnut
내 잡다한 노트
Declarative pipeline과 Scripted pipeline의 비교 본문
DevOps/Jenkins
Declarative pipeline과 Scripted pipeline의 비교
peanutwalnut
2024. 12. 13. 17:11
1. Declarative Pipeline
장점
- 가독성
- 구조화된 문법을 사용하므로 코드가 직관적이고 읽기 쉬움.
- 정해진 구문(pipeline, stages, steps) 덕분에 초보자도 쉽게 이해 가능.
- 에러 방지
- Jenkins에서 선언형 문법을 강제하기 때문에 문법 오류를 줄일 수 있음.
- Jenkins의 자동 완성 및 구문 검증 기능과 잘 연동됨.
- 표준화
- 팀 간에 파이프라인 작성 방식이 일관될 수 있음.
- 반복 가능한 작업에 적합.
- 내장 기능
- post 블록과 같은 후처리 단계(always, success, failure)를 기본 제공.
- agent 설정, 환경 변수(environment) 선언이 간단.
단점
- 제한된 유연성
- 복잡한 조건 분기나 동적인 작업에는 적합하지 않음.
- 특정한 로직을 구현하려면 Scripted Pipeline으로 전환하거나, Groovy 스크립트를 혼용해야 함.
- 특정 작업 구현 어려움
- 병렬 작업에서 동적 처리가 필요하거나, 서버별로 다른 작업을 수행해야 할 경우 구현이 번거로움.
2. Scripted Pipeline
장점
- 유연성
- Groovy 스크립트의 모든 기능을 사용할 수 있어 복잡한 로직 구현 가능.
- 동적으로 작업을 생성하거나 조건문(if, for)을 활용한 작업 처리에 적합.
- 맞춤형 처리
- 선언형 파이프라인에서 다룰 수 없는 작업도 쉽게 처리 가능.
- 특정 상황에 맞는 로직을 자유롭게 작성 가능.
- 공유 라이브러리와 통합
- 공유 라이브러리와 결합하여 확장성 높은 파이프라인 작성 가능.
단점
- 가독성 낮음
- 자유도가 높아지면서 코드가 복잡하고 읽기 어려울 수 있음.
- 팀 간 작성 스타일이 달라질 위험이 있음.
- 문법 오류 가능성
- Groovy 스크립트 문법에 익숙하지 않으면 오류를 만들기 쉬움.
- Jenkins에서 제공하는 구문 검증이나 자동 완성 기능이 덜 효과적.
- 유지보수 어려움
- 복잡한 로직으로 인해 파이프라인 수정 및 디버깅이 어려울 수 있음.
선택 기준
Declarative Pipeline가 적합한 경우
- 단순하고 표준화된 작업
- Docker 이미지 빌드 및 푸시.
- 테스트 실행 후 결과 보고.
- CI/CD 과정이 간단한 프로젝트.
- 팀 간 협업
- 일관성 있고 가독성이 높은 파이프라인 작성이 필요한 경우.
- 초보자 친화적 환경
- Jenkins와 파이프라인 작성에 익숙하지 않은 팀원과 협업할 때.
Scripted Pipeline이 적합한 경우
- 복잡한 로직이 필요한 작업
- 동적으로 작업을 생성하거나 조건에 따라 분기 처리해야 할 때.
- 병렬 작업에서 각 작업에 서로 다른 로직이 필요한 경우.
- 맞춤형 처리 필요
- Jenkins의 기본 기능 외에 특정 요구사항을 구현해야 할 때.
- 여러 서버에서 다른 명령어를 실행하거나 유동적인 환경을 처리해야 할 때.
- 고급 사용자
- Groovy에 익숙하고, 복잡한 파이프라인 작성이 가능한 경우.
추천
- 단순한 CI/CD 파이프라인
- Docker 이미지 빌드, 단순 테스트, 레지스트리 푸시 등 간단한 작업은 Declarative Pipeline 사용을 추천합니다.
- 예:
- 단일 프로젝트에서 반복되는 빌드-테스트-배포 작업.
- 팀 간 협업이 많아 가독성이 중요한 경우.
- 복잡한 환경 제어 및 서버 관리
- 여러 서버를 관리하거나, 작업 흐름이 동적으로 변하는 경우에는 Scripted Pipeline이 적합합니다.
- 예:
- 서버별 초기화 작업.
- 조건에 따라 동작이 크게 달라지는 파이프라인.
- 혼합 사용
- 대부분의 경우 Declarative Pipeline을 기본으로 사용하고, 복잡한 로직이 필요한 부분만 script 블록으로 Scripted 스타일을 섞어 사용하는 것도 좋은 방법입니다.