Jenkins pipeline 문법 정리 (+Stage 동적 생성 및 병렬 실행 등)

0koang·2024년 1월 10일
1

DevOps

목록 보기
3/3

요약

  • 기본 문법들 살펴보자
  • Stage 동적 생성해보자
  • Stage 병렬 실행해보자





문법 정리

// 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

profile
서비스 핵심 가치를 이해하고, 지속적인 개선을 이끄는 엔지니어(를 지향함)

0개의 댓글