Jenkins - запускать параллельные сборки с этапами pararrel по одному на узел / агент - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть работа с pararrel steps, которая проверяет запросы на извлечение перед тем, как голосовать за слияние.Допустим, это выглядит так:

  1. GIT step (тянет конкретный коммит)
  2. (в главном каталоге) 2a.'npm install' шаг 2b.'npm run frontend tests'
  3. (in / каталог имитатора) 3a.'требования pip install -r' 3b.'запустить тесты на питоне.
  4. Сделайте голосование и сообщите с помощью slack

2 и 3 выполняются pararrel.

Мои узлы помечены как brix2 и brix3, их общая метка - brix.У каждого есть 4 исполнителя.

Я хочу, чтобы:

  1. Когда первое задание выполняется, оно полностью выполняется на brix2 - оба шага pararrel должны использовать 2 исполнителя brix2.
  2. Когда второе заданиеработает и brix2 занят, требуется brix3 для использования - так же, как и выше, pararrel для 2 исполнителей
  3. Когда запущено 3 задания, а brix2 и brix3 заняты, он переходит в очередь

Что я пробовал:

  • Когда я использую общую метку, первое задание одновременно запускается как на brix2, так и на brix3.
  • Если я включаю "Не разрешать запуск одновременных сборок", то оно запускаетсятолько одна сборка за раз и добавляет остальные в очередь, хотя 1 узел свободен.
  • Если я использую плагин Throttling Concurrent Builds (установленный на 2 узла), он распределяет мои промежуточные шаги на оба узла, поэтому pt2работает на brix2, а pt3 работает на brix3.Я хочу запустить их на одной машине, в одной рабочей области, но в разных папках.

Я также пытался распределить задачи вручную в исходном задании, проверив, не работают ли исполнители агентов.И я могу дать первые два задания по сборке для brix2 и brix3, но третий и последующие запросы (когда b2 и b3 заняты) должны идти в очередь, и я не знаю, как это сделать

Я также читал о блокировке () шаг, который может заблокировать ресурсы.Я хотел бы заблокировать всех 4 исполнителей на узле, на котором я сейчас работаю, для всего конвейера.Но так ли это должно быть сделано?

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

1 Ответ

0 голосов
/ 20 февраля 2019

Я думаю, что ваша проблема в том, что у ваших узлов должен быть только один исполнитель каждый.Вы можете выполнять шаги параллельно на одном узле - просто сделайте это для шагов 2 и 3. Задание 1 запустится на brix2 и выполнит любые необходимые шаги параллельно, задание 2 на brix3 и задание 3 должны будут подождать одного из них.узлы, чтобы закончить до его начала.

...