// Stage 동적 생성 위함
def dynamicStagesMap
def generateStage(param) {
return {
stage("${param}") {
sleep 1
echo "This is ${param}."
}
}
}
pipeline {
agent any // 모든 노드에서 실행할 수 있도록 지정된 에이전트
options { // 파이프라인 옵션 정의
timestamps() // 각 빌드 단계의 시작 시간을 기록
parallelsAlwaysFailFast() // 병렬 빌드 중 하나가 실패하면 나머지 병렬 빌드를 즉시 중지
}
environment {
// 전역 환경 변수를 여기에서 정의
CUSTOM_ENV_VAR = 'custom_value'
}
stages {
stage('Non-Parallel Stage') { // 병렬로 실행되지 않는 단일 단계. 단계가 순차적으로 실행
steps {
echo 'This stage will be executed first.'
echo "사용자 지정 환경 변수: ${CUSTOM_ENV_VAR}"
script {
// 동적 동작을 위한 스크립트 블록
def dynamicValue = CUSTOM_ENV_VAR.toUpperCase()
echo "Dynamic Value: ${dynamicValue}"
}
}
}
stage('Parallel Stage') { // Branch A, Branch B, Branch C 각각 병렬로 실행되는 단계
when { // 'master' 브랜치에서만 실행되도록 설정
branch 'master'
}
parallel {
stage('Branch A') {
agent {
label "for-branch-a" // 해당 브랜치에서 실행될 노드의 레이블을 지정
}
steps {
echo "On Branch A"
}
}
stage('Branch B') {
agent {
label "for-branch-b"
}
steps {
echo "On Branch B"
}
}
stage('Branch C') {
agent {
label "for-branch-c"
}
stages {
stage('Nested 1') {
steps {
echo "In stage Nested 1 within Branch C"
}
}
stage('Nested 2') {
steps {
echo "In stage Nested 2 within Branch C"
}
}
}
}
}
}
stage('Create Dynamic Stages') { // Stage 동적 생성
steps {
script {
def list = ["Test-1", "Test-2", "Test-3"]
dynamicStagesMap = list.collectEntries {
["${it}" : generateStage(it)]
}
}
}
}
stage('Run Dynamic Stages Sequentially') { // 동적 생성한 stage들 순차적으로 실행
steps {
script {
dynamicStagesMap.each { stageName, dynamicStage ->
dynamicStage()
}
}
}
}
stage('Run Dynamic Stages in Parallel') { // 동적 생성한 Stage들 병렬 실행
steps {
script {
parallel dynamicStagesMap
}
}
}
}
}
https://www.jenkins.io/doc/book/pipeline/syntax/
https://stackoverflow.com/questions/42837066/can-i-create-dynamically-stages-in-a-jenkins-pipeline