실행주기가 다르고, 실행 시 선행 job에 대해 의존관계가 있는 job들을 의도한대로 실행시키는 Jenkins pipeline을 작성하게 되었다.
단순한 예제는 많이 있었지만 내가 원하는 예제는 인터넷에서 찾기 어려웠어서 공식문서를 참고해가며 직접 다양한 실험을 통해 파이프라인을 완성할 수 있었다.
Jenkins pipeline 작성과 groovy 모두 처음 다뤄보는 입장에서, 몇 가지 어려웠던 점들이 있어서 그 부분들을 중심으로 기록을 남겨본다.
이 부분은 Jenkins 공식 문서가 너무 잘 되어있는 편이라, pipeline을 작성하는 데에 핵심이 되는 문법들을 아래 사이트에서 먼저 학습하였다.
https://www.jenkins.io/doc/book/pipeline/syntax/
이후, 공식문서의 예제를 따라해보며 pipeline의 동작을 가볍게 이해해나갔다.
병렬 처리가 가능한, 데이터 간의 의존 관계가 없는 3가지 작업 묶음으로 구성
1. [Parallel #1] Trending Statics Job 실행 블록
2. [Parallel #2] Shorts Statistics Job 실행 블록
3. [Parallel #3] Sequential Stages 블록
[Parallel #1], [Parallel #2] 는 각각 단일 Job을 독립적으로 실행하면 됨
[Parallel #3]의 경우, 순차적으로 실행되는 Job이 5개이고, 앞 작업 실행 결과에 따라 실행될 지 말 지가 결정됨
모든 Job들은 각각이 필요한 특정 시점에만 트리거 되어야 함
Jenkinsfile
코드다.pipeline {
agent any
triggers {
// 1
cron('0,10,20,30,40,50 * * * *')
}
stages('Parallel Stages') {
stage('Parallel Stage') {
// 2
parallel {
// 3
stage("[Parallel #1] Trending Statistics Job") {
// 실행: Trending Statistics Job 실행
}
// 4
stage('[Parallel #2] Shorts Statistics Job') {
// 조건: 한 시간 마다
// 실행: Shorts Statistics Job 실행
}
// 5
stage('[Parallel #3] Sequential Stages') {
// 조건: 한 시간 마다
stages {
stage('(1) Hourly Statistics Job') {
// 실행: Hourly Statistics Job 실행
}
stage('(2) Daily Statistics Job') {
// 조건: 자정이고, 이전 빌드 결과가 'success'이면
// 실행: Daily Statistics Job 실행
}
stage('(3) Weekly Hot News Job') {
// 조건: 토요일 자정이고, 이전 빌드 결과가 'success'이면
// 실행: Weekly Hot News Job 실행
}
stage('(4) Total Statistics Job') {
// 조건: 이전 빌드 결과가 'success'이면
// 실행: Total Statistics Job 실행
}
stage('(5) Daily Hot News Job') {
// 조건: 7시 || 18시 이고, 이전 빌드 결과가 'success'이면
// 실행: Daily Hot News Job 실행
}
}
}
}
}
}
}
주석 번호 | 설명 |
---|---|
1 | 전체 파이프라인 트리거 - 시간 trigger의 가장 작은 단위인 10분마다 전체 파이프라인이 트리거되도록 설정함 |
2 | 내부 세 개의 stage([Parallel #1], [Parallel #2], [Parallel #3])들이 병렬적으로 실행되도록 설정 |
3 | 10분마다 아무 의존관계 없이 실행하는 stage (Trending Statistics Job을 실행) |
4 | 한 시간 마다 아무 의존관계 없이 실행하는 stage (Shorts Statistics Job을 실행) |
5 | stages 내부에 Job 간 실행 순서에 의존관계가 stage들 5개가 순차적으로 기입. stage들은 기입된 조건을 따라 실행됨 |
triggers
: 전체 파이프라인 내에서 하나만 설정 가능해서, 가장 작은 trigger 단위인 10분 마다의 cron 으로 설정하고 세부 시간 조건은 별도로 설정함parallel
: stages 블럭이 아닌 stage 블럭 안에만 들어올 수 있기 때문에 외부에 stage 블럭으로 한번 감쌌다.stage('[Parallel #3] Sequential Stages')
내부의 stages 블럭에서 순서만 맞추면 의도대로 설정이 가능하다.