Дженкинс Джоб DSL Динамические Параллельные Шаги - PullRequest
0 голосов
/ 15 января 2019

Текущая ситуация : В настоящее время в Jenkins 1 у меня есть JobA и JobB, выполняющие тесты с использованием определенного файла JobAFile и JobBFile соответственно. Имена заданий хранятся в массиве и передаются как в триггере downstreamParameterized.

Сейчас я создаю динамически созданные файлы JobAFilePt1, JobBFilePt1, JobBFilePt2 и т. Д. Для JobA и JobB соответственно. Это требует от меня использовать forMatchingFiles в параметре Factory. Тем не менее, JobA имеет различные задания внутри, такие как JobASubJob1, JobASubJob2, который портит сопоставление с шаблоном forMathcingFiles.

Чтобы исправить это, я попытался поставить что-то вроде:

JobAJobs.each { String subJob->
    steps {
        downstreamParameterized {
            trigger('subJob') {
                paramterFactories {
                    forMatchingFiles("somePattern${subJob}")
                }
            }
        }
    }

Проблема : Но это просто заставляет его работать последовательно. Как мне получить шаги для параллельного запуска? Или, по крайней мере, не блокировать его, пока не будет выполнена сборка для триггера? Я посмотрел онлайн и нашел только решения для декларативных конвейеров и скриптовых конвейеров, а не Job DSL.

В качестве другого альтернативного возможного решения: Я смотрю только на то, чтобы сделать это сейчас Phase, и каждый phaseJob создается динамически. Однако, поскольку мне нужно передать «n» количество файлов в качестве параметров для определенного файла (который можно найти с помощью шаблона), я не уверен, как подойти к этому концу. Как мне динамически дать ему параметры?

phase("Run jobs") {
    JobAJobs.each { String subJob -> {
        phaseJob("subJob") {
            parameters { 
                <someParameterType> 
            }
        }
    }
}

Вместо someParameterType я хотел бы попытаться передать параметры файла, но не уверен, как к этому подойти. Есть предложения?

1 Ответ

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

Ваша проблема - типичный вариант использования трубопровода. Job-DSL становится довольно гротескным, когда используется для планирования сборок. Это не должно использоваться для этого. Вы можете просто создать конвейерное задание и использовать параллельный блок. С помощью скриптового синтаксиса вы можете сделать что-то вроде:

node {
    stage("build") {
        parallel (
            JobAJobs.each { subJob ->
                build(
                    job: subJob,
                    parameters: [
                        [
                            $class: 'StringParameterValue',
                            name: 'PARAM_NAME',
                            value: 'myvalue'
                        ]
                    ]
                )
            }
        )
    }
}

Это может помочь вам начать работу.

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