Конвейер Jenkins: как запустить другую работу и ждать ее, не используя дополнительного агента / исполнителя - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь настроить различные конвейеры Jenkins, последний этап которых - запуск некоторых приемочных тестов. Короче говоря, приемочные тесты и тестовые данные (большая часть которых является общей) для всех продуктов помещаются в один и тот же репозиторий, размер которого составляет около 0,5 ГБ. Поэтому казалось, что лучше всего иметь отдельную работу для приемочных тестов и запускать ее с шагом «сборки» из каждого конвейера с соответствующими аргументами для запуска соответствующих тестов. (Иногда полезно повторно запустить эти тесты, не перестраивая продукт)

stage('AcceptanceTest') {
    steps {
        build job: 'run-tests', parameters: ..., wait: true
    }
}

До сих пор я видел, что я могу либо:

  1. вызвать работу как обычно. Но это использует дополнительный агент / исполнителя, кажется, нет способа сказать ему, чтобы использовать один из построить (магистральный трубопровод). Оба конвейера начинаются с "agent {label 'master'}", но это кажется, означает «выделить нового агента на главном узле соответствия».
  2. вызвать задание с аргументом wait: false. Это не заблокировать исполнителя, но это значит, что я не могу сообщить о результатах испытания в магистральном трубопроводе. Создается впечатление, что тест этап всегда удавался.

Есть ли лучший способ?

Ответы [ 2 ]

2 голосов
/ 11 марта 2019

Кажется, я решил эту проблему, добавив «agent none» вверху моего основного конвейера и переместив «agent {label 'master'}" на этап сборки. Затем я могу оставить свой этап «AcceptanceTest» без агента и определить его в задании «run-tests», как и раньше. Из документов у меня сложилось впечатление, что если вы ставите агентов поэтапно, то на всех стадиях должен быть один, но, похоже, это не так. Который является удачным для этого варианта использования ...

0 голосов
/ 11 марта 2019

Не думаю, что есть другой способ декларативного конвейера.

С другой стороны, для скриптового конвейера вы можете выполнить это за пределами node {}, и он будет просто удерживать одного исполнителя на мастере, освобождая одного на ведомом.

stage("some") {
    build job: 'test'
    node {
        ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...