0부터 시작하는 Jenkins & GitLab 공부 - Jenkins Declarative vs Scripted

Jenkins Pipeline DSL에는 Declarative와 Scripted가 존재한다. 두 가지에 대해 알아보고, 차이점에 대해서도 알아보자
- DSL ( Domain Spectific Language ) : 특정 영역을 타겟하고 있는 언어
1. Scripted Pipeline
Scripted Pipeline은 Jenkins Pipeline에 가장 먼저 적용된 Imperative Programming Model로 Groovy 문법을 사용한다
- Imperative Programming Model ( 명령형 프로그래밍 모델 ) : 수행할 명령들을 순서대로 써 놓은 모델
장점
- 커스텀 작업 생성이 가능하여 유연성이 좋으며, 복잡한 Pipeline 모델링이 가능하다
- 더 많은 절차형 코드 사용 가능
- 전통적인 Pipeline as code 모델로 하위 호환성이 좋다
- 사용자 맞춤화된 Pipeline을 설계할 수 있다
- 프로그램을 작성하는 것과 유사하다
단점
- Groovy 언어 및 환경으로 제한된 구문 검사
- 복잡하고, 유지 보수하기 힘들다
- 전통적 Jenkins 모델과 연관이 적다
2. Declarative Pipeline
Declarative Pipeline은 Jenkins Pipeline의 최신 기능으로 Groovy 문법을 사용한다 ( Groovy 문법을 잘 몰라도 작성 가능하다 )
장점
- 더 쉽고, 많은 옵션과 기능이 있다
- 더 구조화 되어 있어 전통적 Jenkins 모델과 유사
- Pipeline 사이의 일관성이 높다
- 문법 확인 및 에러 확인이 쉽고, 선언하는 것이 유연하여 가독성이 좋다
단점
- 프로그램적 요소가 적다
- 복잡한 Pipeline 작성에 적합하지 않다
- 정해진 구조에서 벗어나 사용자 맞춤화된 Pipeline 코드 작성이 어려워 유연성이 적다
3. Scripted vs Declarative
Scripted는 Declarative보다 더 세밀하고, 다양한 작업을 생성할 수 있으며, 사용자 맞춤화된 Pipeline 작성에 적합하다. 허나 Declarative보다 복잡하고, 유지 보수하기 힘들다
Declarative는 Scripted보다 많은 옵션과 기능이 있으며, 작성하기 쉽고, 가독성이 좋다. 허나 복잡한 Pipeline을 작성하는 것은 어려우므로, 단순한 Pipeline 작성에 적합하다
Declarative와 Scripted는 서로 지원하는 Directive가 다르다
- Directive는 Pipeline에서 값을 정의하고, 행동을 설정하고, 수행할 작업을 명시하는 문장이나 코드 블록으로 stage, git, sh 등 여러 종류가 있다
Scripted는 Declarative와 다르게 step을 선언하지 않는다
Declarative는 주요 정보를 미리 정의된 특정 목적과 행동을 하는 섹션에 입력하는 것이라면, Scripted는 프로그램 흐름과 로직을 실행하기 위해 명령형 언어로 작성하는 것이다
- Declartive는 원하는 최종 형태를 선언하는 것이라면, Scripted는 원하는 형태를 위해 수행되어야 할 동작들을 선언하는 것이다