groovy Jenkins pipeline -基于标记值运行构建后步骤

ztmd8pv5  于 2023-03-07  发布在  Jenkins
关注(0)|答案(1)|浏览(222)

我想发布测试结果作为构建后操作的一部分,仅当阶段-Execute Test已经运行时,我的意思是如果构建在执行测试阶段之前失败,则跳过发布测试结果作为构建后操作的一部分。
我已将一个标志变量定义为全局变量,并在运行执行测试阶段时将该值操作为True。如果该标志为True,则将发布测试结果函数作为生成后操作的一部分执行,但它将引发以下错误。我做错了什么?谢谢。

WorkflowScript: 51: Expected a stage @ line xxx, column x.

           post {

           ^

修订的管道:

def flag = false
@Field String NEXUS = 'our-nexus-link'

def call(body) {
    def pipelineParams = [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = pipelineParams
    body()

    pipeline {
        agent {
            .....
            }
        }
        
         stages {
            stage ('Git Setup') {
                steps {
                    .....       
                }
            }

            stage ('Compile') {
                .......
            }

            stage('Scan') {
                        .........
                    }
            
            stage('Execute Test') {
                        steps {
                            container('Go') {
                                function_to_Run_TestCases(parameters)
                                script { flag = true }      
                            }
                        }
                    }
        post {
            always {
                dir(workspace) {
                    archiveArtifacts artifacts: workspace, allowEmptyArchive: true
                }
                script {
                    if (flag == true) { 
                       function_to_PUBLISH_TestCases(testDir: checker_dir) 
                    }
                }
            }
}
nle07wnf

nle07wnf1#

您在这里遇到的问题是post节应该在stages节完成之后,而不是在stages节中。因此,您在post之前缺少了}。请考虑文档中的此示例以了解更多信息。
另一方面,在“Execute Test”阶段使用post可能会更好地完成您试图实现的目标,如下所示:

stage('Execute Test') {
    steps {
        container('Go') {
            function_to_Run_TestCases(parameters)    
        }
    }
    post {
        success {
            dir(workspace) {
                archiveArtifacts artifacts: workspace, allowEmptyArchive: true
            }
            script {
                function_to_PUBLISH_TestCases(testDir: checker_dir) 
            }
        }
    }
}

这样,您就不需要单独的标志,因为如果“Execute Test”阶段失败,function_to_PUBLISH_TestCases将不会运行。

相关问题