Трубопровод Дженкинса - построение параллели с картой, полученной из функции - PullRequest
0 голосов
/ 02 января 2019

Недавно я попытался построить конвейер Дженкинса с большим количеством «тестов» на одном из его этапов.

Дело в том, что в какой-то момент я получил ошибку, касающуюся того, что фаза моих этапов была слишком большой, поэтому я попытался решить ее с помощью функции, которая будет строить все мои этапы, и я могу запустить вывод этой функции (карта этапов) в параллельно. Некоторые этапы должны выполняться на агенте (узле), взятом из метки, а на других есть несколько уникальных шагов. В общем, я пытаюсь понять, как я могу написать функцию, которая будет строить карту для параллельного запуска, - но она не увенчалась успехом, и я не нашел ни одного хорошего примера в Интернете.

Я знаю, что вопрос носит общий характер, но если кто-нибудь может указать мне на некоторые примеры или просто написать один, это будет здорово.

Это фрагмент кода, над которым я работаю (не полный JenkinsFile):

def getParallelBuilders(list_arr) {

def builders = [:]   

builders['Test-1'] = 
            stage ('Test-1')
            {
                node('ci-nodes')
                {
                        when {
                            environment name: 'TEST_NAME', value: 'true'
                            beforeAgent true
                        }
                        timeout(time: 1, unit: 'HOURS')
                        script { runtests() }
                        post {
                            success { onTestSuccess title: 'Temp', pytest: 'results.xml' }
                            cleanup { afterTestCleanup2("clean") }
                        }
                }
            }
return builders

}

Вызов этой функции происходит из моего блока 'pipe', после этапов сборки, настройки и т. Д .:

        stage('Testing') {
            steps {
                script { parallel getParallelBuilders(list_arr) }
            }
        }

Не уверен, что мой подход к этой проблеме является правильным, надеюсь, кто-то может указать мне правильное направление.

1 Ответ

0 голосов
/ 03 января 2019

Через некоторое время вот решение, которое я получил для моей проблемы:

    builders = [
            'Test1':
            {
                stage ('Test1')
                {
                    if (RUN_TESTS == 'true')
                    {
                        timeout(time: 30, unit: 'MINUTES')
                        {
                            node('ci-nodes')
                            {
                                try 
                                {
                                    runtests()
                                    onTestSuccess title: 'Temp', pytest: 'results.xml'
                                } 
                                catch (err)
                                {
                                    onTestFailure testName: "Test1"
                                }
                                finally 
                                {
                                    afterTestCleanup()
                                }
                            }
                        }
                    }
                }
            }

Основной проблемой было понимание синтаксиса конвейера сценариев, который действительно отличается от декларативного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...