Подтвердить что ты не робот

Рабочие стадии параллельно с рабочим процессом/трубопроводом Дженкинса

Мне интересно, как параллельные шаги должны работать с плагином Workflow/pipe Jenkins, особенно. как смешивать их с этапами сборки. Я знаю об общей схеме:

parallel(firstTask: {
  // Do some stuff
}, secondTask: {
  // Do some other stuff in parallel
})

Однако, я хотел бы запустить пару этапов параллельно (на том же node, который имеет несколько исполнителей), поэтому я попытался добавить такие этапы:

stage 'A'
// Do some preparation stuff

parallel(firstTask: {
  stage 'B1'
  // Do some stuff
}, secondTask: {
  stage 'B2'
  // Do some other stuff in parallel
})

stage 'C'
// Finalizing stuff

Это не работает должным образом. Задачи "делать вещи" выполняются параллельно, но параллельные этапы заканчиваются немедленно и не включают материал, который они должны содержать. Как следствие, Stage View не показывает правильный результат, а также не связывает журналы.

Могу ли я строить разные этапы параллельно или это "параллельный" шаг, предназначенный только для одного этапа?

4b9b3361

Ответ 1

Нельзя размещать в parallel устаревший не-блочный stage (как в исходном вопросе).

По JENKINS-26107, stage принимает блок-аргумент. Вы можете разместить parallel внутри stage или stage внутри parallel или stage внутри stage и т.д. Однако визуализации сборки не гарантируют поддержку всех вложений; в частности

  • Встроенные шаги трубопровода ( "таблица дерева", перечисляющая каждый шаг, выполняемый сборкой) показывает произвольное размещение stage.
  • Плагин Pipeline Stage View в настоящее время отображает только линейный список этапов в том порядке, в котором они были запущены, независимо от структуры вложенности.
  • Blue Ocean отобразит этапы верхнего уровня, плюс parallel ответкит внутри этапа верхнего уровня, но в настоящее время не более.

JENKINS-27394, если будет реализован, отобразится произвольно вложенное stage s.

Ответ 2

этот синтаксис теперь устарел, вы получите эту ошибку:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 14: Expected a stage @ line 14, column 9.
       parallel firstTask: {
       ^

WorkflowScript: 14: Stage does not have a name @ line 14, column 9.
       parallel secondTask: {
       ^

2 errors

Вы должны сделать что-то вроде:

stage("Parallel") {
    steps {
        parallel (
            "firstTask" : {
                //do some stuff
            },
            "secondTask" : {
                // Do some other stuff in parallel
            }
        )
    }
}

Ответ 3

Я только что протестировал следующий конвейер, и он работает

parallel firstBranch: {
    stage ('Starting Test') 
    {
        build job: 'test1', parameters: [string(name: 'Environment', value: "$env.Environment")]
    }
}, secondBranch: {
    stage ('Starting Test2') 
    {
        build job: 'test2', parameters: [string(name: 'Environment', value: "$env.Environment")]
    }
}

Это задание с именем "trigger-test" принимает один параметр с именем "Среда"

Задание 'test1' и 'test2' - это простые задания:

Пример для 'test1'

  • Один параметр с именем "Среда"
  • Pipeline: echo "$ env.Environment-TEST1"

При выполнении я могу видеть обе стадии в одно и то же время