包装詹金斯管道中的几个阶段

问题描述 投票:0回答:1

在我的声明性管道中,我有多个不需要Xvfb的阶段,有多个不需要的Xvfb测试阶段。

是否可以为多个阶段定义一个Jenkins wrapper?像这样:

  pipeline {
        agent any

        stages {
            stage('Build the context') {
                steps {
                    echo 'No Xvfb here'
                }
            }
            wrap([$class: 'Xvfb', screen: '1920x1080x24']) {
                stage('Test Suite 1') {
                    steps {
                        echo 'Use Xvfb here'
                    }
                }

                stage('Test Suite 2') {
                    steps {
                        echo 'Use Xvfb here'
                    }
                }
            }

            stage('cleanup') {
                steps {
                    echo 'No Xvfb here'
                }
            }
        }

无论将包装块放置几个阶段,我都会遇到编译错误:

WorkflowScript: 10: Expected a stage @ line 10, column 17.
               wrap([$class: 'Xvfb', screen: '1920x1080x24']) 
continuous-integration jenkins-pipeline jenkins-plugins pipeline
1个回答
0
投票

由于wrap是一个步骤,我们必须从stepsscript上下文中调用它。只有后者允许我们在wrap块内部创建嵌套阶段。试试这个:

pipeline {
    agent any

    stages {
        stage('Build the context') {
            steps {
                echo 'No Xvfb here'
            }
        }
        stage('Test Start') {
            steps {
                script {
                    wrap([$class: 'Xvfb', screen: '1920x1080x24']) {
                        stage('Test Suite 1') {
                            echo 'Use Xvfb here'
                        }

                        stage('Test Suite 2') {
                            echo 'Use Xvfb here'
                        }
                    }
                }
            }
        }

        //...
    }
}

额外的“测试开始”阶段可能看起来有些难看,但是可以。

:嵌套测试阶段不需要steps块,因为我们已经在script块内,因此适用与脚本化管道相同的规则。

© www.soinside.com 2019 - 2024. All rights reserved.