Jenkins

[Jenkins] stage skip 하기 (when, if)

thxxyj 2022. 11. 16. 10:25
728x90

Jenkins에서 "when 구문"을 사용하면 stage를 skip 할 수 있다.

https://www.jenkins.io/doc/book/pipeline/syntax/#when

 

stage('Sonar Analysis') {
    when (BRANCH_NAME != 'master') {
        echo 'Excecuted only on master branch.'
    }
}

when 구문의 조건에 충족되지 않아 Sonar Analysis stage가 skip 되었다

출처 https://medium.com/@Lopay/how-to-skip-stages-in-jenkins-scripted-pipeline-f653e54d835d

 


Declarative pipeline 예시

pipeline {
    agent any
    stages {
        stage('stage 1') {
		    when {
                expression {
                    params.PROJECT == 'projectA'
                }
            }
            steps {
                echo "PROJECT : ${PROJECT}"
            }
        }
        stage('stage 2') {
		    when {
            	allOf {
                    expression {
                        params.PROJECT != 'projectX'
                        params.PROJECT != 'projectY' 
                        params.PROJECT != 'projectZ' 
                    }
                }
            }
            steps {
                echo "PROJECT : ${PROJECT}"
            }
        }
    }
}


Declarative pipeline의 script block에서 when 구문은 동작하지 않아서 "if 구문"을 사용해서 stage를 skip 한다.

더보기

when is a directive used in the declarative pipeline definition - it won't work inside script {} block. Instead use if.

출처 https://stackoverflow.com/questions/49558221/no-such-dsl-method-when-found-among-steps-in-jenkinsfile

 

if 구문으로 stage를 실행 / skip 할 조건 설정하기

def testSuiteMapping = [
    'project1': ['tc1', 'tc2', 'tc3'],
    'project2': ['tc4', 'tc5'],
    'project3': ['tc1', 'tc2', 'tc3', 'tc4', 'tc5']
]
def testSuite = testSuiteMapping["${TARGET_PROJECT}"]    //TARGET_PROJECT는 JOB의 parameter

stage("stage 1"){
    steps {
        script {
           if ("$testSuite".contains('tc1')){
                echo "THIS STAGE IS NOT SKIPPED"
                // (.....)
            }
        }
    }
}

stage2~4는 skip 되었다

위 캡처 처럼 stage2~4가 skip 되더라도 if 문을 실행하기 때문에 when 구문을 사용한 stage 처럼 완전 skip 되지는 않는다.

 

728x90