首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于条件的Jenkinsfile设置stageResult变量

基于条件的Jenkinsfile设置stageResult变量
EN

Stack Overflow用户
提问于 2020-08-04 01:12:34
回答 1查看 1.1K关注 0票数 1

我试图在声明式语法中编写Jenkinsfile,这里的要求是,如果set环境变量不匹配,则管道阶段应该描述为“中止”,但是构建状态可以是中止的,也可以是不稳定的,在Jenkins在线文档和代码段生成器中确实看到了下面的样式

代码语言:javascript
复制
catchError(buildResult: 'ABORTED', stageResult: 'ABORTED') {
    // some block
}

catchError不符合我的目的,因为当阶段内的脚本不返回true或如果存在执行错误时,使用它是合适的,尽管默认的(当詹金斯声明式语法中的条件合适时),Jenkins不允许设置阶段结果“中止”。

代码语言:javascript
复制
when {
                expression {
                    SCM_BRANCH_NAME ==~ /(master|QA)/
                }
                expression{
                    ENVIRONMENT ==~ /(QA)/
                }
                allOf{
                    environment ignoreCase: true,name: 'PRODUCT_NAME' , value: 'PRODUCT-1'
                }
            }

请使用if和else格式的示例Jenkinsfile查看下面的示例Jenkinsfile

代码语言:javascript
复制
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,任何使用插件或示例符号脚本的建议都将受到极大的赞赏。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-04 11:21:53

下面的片段为我工作。您可以使用catch错误块,并在满足某些条件时从该块抛出错误。还可以在“阶段后故障”部分捕获异常。

代码语言:javascript
复制
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"
                '''
            }
        }
    } 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63238923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档