DSL은 Domain-sepcific Language의 약자로, 특정한 상황을 위한 프로그래밍언어다. 여기서 상황이란 젠킨스 파이프라인 생성을 의미한다.
젠킨스 DSL은 그루비 언어를 이용해 작성됐고, 그루비가 선택된 것은 그루비가 제공하는 기능이 다른 언어보다 생성하기 쉽게 만들기 때문이다. 반대로 그루비 문법에 심하게 의존되어 있다.
노드는 마스터나 에이전트를 위한 새로운 용어라 생각하면 된다. 노드는 Manage Jenkins > Manage Nodes 인터페이스를 통해 마치 슬레이브처럼 설정된다. 각 노드에는 젠킨스 에이전트가 설치돼 잡을 실행하게 된다.
특정한 노드를 찾는 방법은 레이블에 해당하는 명칭을 변수로 넘겨 지칭한다. 이는 이미 정의된 노드나 시스템이어야 하고 젠킨스가 이를 알고 있어야 한다.
하나의 노드에 여러 개의 레이블을 활용하기 노드를 설정할 때 레이블 사이에 스페이스를 사용하면 여러 개의 레이블을 설정할 수 있다. 이후 파이프라인에서 잡을 수행할 레이블을 지정하는 곳에서 or을 위해서는 || . and는 &&를 사용하면 된다.
{} 기호는 그루비 클로저로 파이프라인의 현재 노드에 연관되어 있는 코드 블록의 시작과 끝을 나타낸다. 클로저는 프로그램 간 절달할 수 있는 엔티티 역할도 하며, 마지막 문장이 리턴 값이 된다.
파이프라인에서 이 부분이 실행되면 노드에 연결되어 워크스페이스를 생성하고 엑시큐터가 사용 가능할 때 코드를 수행할 수 있게 스케쥴을 정한다.
특정한 스테이지를 수행하기 위해 노드를 정의하는 것 외에도 노드는 매핑과 연동되어 코드 블록을 어디에서 실행할지 결정할 수 있다.
parallel ( win: { node ('win64'){ ... }} linux: {node ('ubuntu'){...}} )
노드의 정의 부분 안에 존재하는 stage 클로저는 각각의 설정, DSL 명령어, 로직을 그룹으로 묶을 수 있게 해준다. 스테이지는 이름이 꼭 필요하며, 이를 통해 스테이지가 수행하는 일을 요약하게 된다.
하나의 스테이지에 파이프라인 로직을 얼마나 포함하게 할지는 개발자에게 달려 있다. 하지만 권장되는 방식은 각각의 스테이지를 전통적인 파이프라인 하나가 담당하는 크기로 나누는 것이다. 예를 들어, 소스 코드를 내려받는 작업이나 이를 컴파일하는 것, 단위 테스트를 실행하는 것, 통합 테스트를 실행하는 것 등이 될 수 있다.
스테이지 안에는 실제 젠킨스 DSL 명령어가 들어간다. 젠킨스에서는 이를 스텝이라고 지칭한다. 스텝은 DSL에서 가장 최소 기능 단위가 된다. 이는 그루비 명령어는 아니지만, 그루비 명령어를 사용할 수도 있다.
스크립트에서 DSL을 사용하다 보면 축약된 문법과 전체 문법을 모두 보게 될 것이다. 젠킨스 DSL에서 스텝은 맵 형태의 매개 변수를 사용한다.
git branch: 'test',
url: '<git주소>'
그루비에서는 매개 변수를 사용할 때 괄호를 생략하는 것을 허용한다.
git([branch: 'test',
url: '<git주소>'])