Завернуть несколько этапов в трубопроводе Дженкинс - PullRequest
1 голос
/ 12 марта 2020

В моем декларативном конвейере у меня есть несколько этапов, где Xvfb не требуется, и несколько этапов тестирования, где он есть.

Можно ли определить обертку Jenkins для нескольких этапов? Примерно так:

  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']) 

1 Ответ

1 голос
/ 13 марта 2020

Поскольку wrap - это шаг, мы должны вызывать его из контекста steps или script. Только последний позволяет нам создавать вложенные этапы внутри блока 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, поэтому применяются те же правила, что и в сценариях конвейера.

...