앞 장에서 젠킨스 파이프라인을 생성해 다양한 내용을 간략히 살펴봤다. 파이프라인을 정의하기 위해 서술적인 파이프라인 스크립트를 이용했다.
서술적 파이프라인 문법은 그루비(Groovy) 문법의 좀 더 간단하고 구조화된 버전이다. 단, 프로그래밍이 가능한 측면에서는 그루비가 좀 더 강력하다. 이번 장에서는 서술적 파이프라인 문법에 대해 조금 더 자세히 알아보도록 하겠다!
간단히 말해서, 서술적 파이프라인은
노드(node) 블록
,스테이지(stage) 블록
,디렉티브(directive)
,스텝(step)
의 집합이다.
- 하나의 노드 블록은 여러 스테이지 블록을 포함할 수 있고, 반대도 가능하다.
- 또한 여러 스테이지를 동시에 실행할 수도 있다.
✅ 노드 블록
노드 블록은 스테이지 블록, 디렉티브, 스텝이 실행될 젠킨스 에이전트를 정의한다.
node('<parameter>'){<constituents>}
✅ 스테이지 블록
스테이지 블록은 같은 목적을 가진 스텝과 디렉티브의 모음이다.
stage('<parameter>'){<constituents>}
✅ 디렉티브
디렉티브의 가장 큰 목적은 환경 변수(environments), 옵션, 파라미터, 트리거, 툴을 제공해 노드 블록과 스테이지 블록, 스텝을 지원하는 것이다.
✅ 스텝
스텝은 서술적 파이프라인을 구성하는 가장 중요한 요소다.
· 스텝은 배치 스크립트, 셸 스크립트, 다른 실행 가능한 커맨드가 될 수 있다.
· 스템의 목적은 저장소를 복사하거나, 코드를 빌드하거나, 테스트를 수행하거나, 빌드 결과물을 저장소에 올리거나, 정적 코드 분석을 수행하는 것이다.
// Node block
node {
// Directive 1
def mvnHome
// Stage block 1
stage('Preparation') { // for display purposes
// Step 1
git 'https://github.com/jglick/simple-maven-project-with-tests.git'
// Directive 2
mvnHome = tool 'M3'
}
// Stage block 2
stage('Build') {
// Step 2
withEnv(["MVN_HOME=$mvnHome"]) {
if (isUnix()) {
sh '"$MVN_HOME/bin/mvn" -Dmaven.test.failure.ignore clean package'
} else {
bat(/"%MVN_HOME%\bin\mvn" -Dmaven.test.failure.ignore clean package/)
}
}
}
// Stage block 3
stage('Results') {
// Step 3
junit '**/target/surefire-reports/TEST-*.xml'
// Step 4
archiveArtifacts 'target/*.jar'
}
}
· 위 코드에서 node('master')
에서 문자열 master는 파라미터(레이블)로 젠킨스에게 젠킨스 마스터를 이용해 노드 블록을 실행하라고 알려준다.
· any
를 파라미터로 사용하면 모든 스테이지 노드와 스텝, 디렉티브는 임의의 젠킨스 슬레이브 중 하나에서 수행된다.
· 젠킨스 파이프라인 문법 도구는 파이프라인 코드를 작성하기 위한 빠르고 쉬운 방법이다.
· 파이프라인 문법 도구는 젠킨스 파이프라인 잡 안에서 사용 가능하다.
이번에는 앞에서 생성한 파이프라인을 파이프라인 문법 도구를 통해 재작성할 것이다!
파이프라인 메이븐 통합 플러그인
파이프라인 메이븐 통합 플러그인은 파이프라인 코드 안에서 메이븐의 사용을 가능하게 해준다.
새로운 젠킨스 파이프라인 잡을 만들어보자!
젠킨스 대시보드에서 New Item 링크를 클릭한다.
Pipeline 선택 후, Enter an item 영역에 파이프라인의 이름을 입력하고 하단의 Ok 버튼을 클릭한다.
Pipeline 탭에서 Pipeline Syntax
링크를 클릭하면, 다음과 같은 새로운 탭이 열린다.
Snippet Generator를 이용해 다양한 블록과 스텝을 위한 파이프라인 코드를 만들 수 있다.
노드 블록을 위한 코드를 생성하자.
node: Allocate node
를 선택한다.built-in
을 입력한다(책에는 master
라고 써야한다고 되어 있지만 경고문을 보면 더이상 master
는 사용되지 않는다고 나와서 built-in
으로 대체했다.)Preparation과 Build 두 개의 스테이지 블록을 생성한다.
6번처럼 Build라는 이름의 스테이지 블록을 생성해 생성된 코드를 노드 블록 안, Preparation 스테이지 블록 밑에 복사한다.
그러면 다음과 같은 코드가 있을 것이다.
이제 깃허브에서 소스코드를 내려받아보자.
디렉티브를 생성해 젠킨스가 앞서 전역 도구 환경 설정에서 설정한 메이븐을 사용하게 한다.
내용이 많아 다음 장에서 마무리하도록 하겠다.