Переменная результата на этапе настройки Jenkinsfile в зависимости от условий - PullRequest
1 голос
/ 04 августа 2020

Я пытаюсь написать сценарий Jenkinsfile в декларативном синтаксисе, требование здесь: если заданные переменные среды не совпадают, этап конвейера должен отображаться как «Aborted», но статус сборки может быть Aborted или нестабильным, в Jenkins онлайн документация и генератор фрагментов видели следующий стиль

catchError(buildResult: 'ABORTED', stageResult: 'ABORTED') {
    // some block
}

catchError не служит моей цели, так как он подходит для использования, когда сценарий внутри сцены не возвращает true или если есть ошибка выполнения, хотя по умолчанию , когда условие в декларативном синтаксисе Jenkins является подходящим, Jenkins не позволяет устанавливать результат этапа на «ABORTED»

when {
                expression {
                    SCM_BRANCH_NAME ==~ /(master|QA)/
                }
                expression{
                    ENVIRONMENT ==~ /(QA)/
                }
                allOf{
                    environment ignoreCase: true,name: 'PRODUCT_NAME' , value: 'PRODUCT-1'
                }
            }

Просмотрите образец файла Jenkins ниже, используя формат if и else Образец файла Jenkins

pipeline {
    agent {
        node {
            label 'master'
        }
    }
    environment{
        ENVIRONMENT = "QA"
        PRODUCT_NAME = "PRODUCT-1"
        SCM_BRANCH_NAME = "master"
    }
    stages{
        stage('Testing-1') {
            when{
            expression{
                    ENVIRONMENT ==~ /(QA)/
                }
            }
            steps {
                script {
                    if (PRODUCT_NAME == PRODUCT-1){
                        sh """
                        echo "Reached Here ${ENVIRONMENT} - ${PRODUCT_NAME} - ${SCM_BRANCH_NAME}"
                        // do testing for product 1
                        """  
                        
                    }
                    else{
                        stageResult = 'ABORTED'
                        echo "PRODUCT not Available for Testing"
                    }
                }
            }
        }

        stage('Testing-2'){
            steps{
                sh '''
                    echo "Reached Second Stage"
                '''
            }
        }
    }
}    

Любые предложения о том, как реализовать сценарий, в котором условия не выполнено, установите stageResult как Abort, любые предложения либо с помощью плагина o r с образцом нотации скрипта приветствуется

Спасибо

1 Ответ

3 голосов
/ 04 августа 2020

Нижеприведенный фрагмент работал у меня. Вы можете использовать блок catch error и выдавать ошибку из этого блока при выполнении какого-либо условия. Вы также можете поймать исключение в разделе сбоя после этапа.

pipeline {
    agent {
        node {
            label 'master'
        }
    }
    environment{
        ENVIRONMENT = "QA"
        PRODUCT_NAME = "PRODUCT-1"
        SCM_BRANCH_NAME = "master"
    }
    stages{
        stage('Testing-1') {
            when{
            expression{
                    ENVIRONMENT ==~ /(QA)/
                }
            }
            steps {
                script {
                    catchError(buildResult: 'FAILURE', stageResult: 'ABORTED'){
                        if (PRODUCT_NAME != PRODUCT-1) {
                            error ("PRODUCT not Available for Testing")
                        }
                        sh """
                        echo "Reached Here ${ENVIRONMENT} - ${PRODUCT_NAME} - ${SCM_BRANCH_NAME}"
                        // do testing for product 1
                        """  
                    }
                }
            }
            post {
                failure {
                    echo "Something Failed and error has been catched"
                }
            }
        }

        stage('Testing-2'){
            steps{
                sh '''
                    echo "Reached Second Stage"
                '''
            }
        }
    } 
...