Как запустить jenkins на конкретном node с помощью конвейерного плагина?

У меня есть работа с трубой Jenkins под названием "TestPipeline". Я хочу запустить сборку на двух разных ведомых, которые обозначены как "tester1" и "tester2". И трубопровод script здесь довольно прост:

node('tester1') {
    build 'test_job'
}
node('tester2') {
    build 'test_job'
}

Однако, когда я запускаю задание TestPipeline, "test_job" не будет выполняться на узлах, которые я назначил. Но вместо этого выполняйте случайный node.

Мне интересно, должен ли я установить "Ограничить, где этот проект может быть запущен" на моем "test_job" . Поэтому я установил его на "тестер" (метка "тестер" содержит как node "тестер1", так и "тестер2" ). Но когда я снова запускаю работу с конвейером, "test_job" запускается дважды на "тестер2". Я должен ожидать, что работа начнется сначала на "tester1", а затем запустится на "tester2". Почему это? Это потому, что шаг "node" не имеет значения, когда дело доходит до того, какой из node должен строиться шаг сборки?

Ответы

Ответ 1

Смотрите здесь здесь. Решение состоит в следующем.

  • Установите Node и плагин параметров метки
  • В конфигурации test_job выберите "Эта сборка параметризирована" и добавьте параметр "Ярлык" и установите имя параметра "node"
  • В конвейере script используйте код:
build job: 'test_job', parameters: [[$class: 'LabelParameterValue', name: 'node', label: 'tester1']]
build job: 'test_job', parameters: [[$class: 'LabelParameterValue', name: 'node', label: 'tester2']]

И работа будет построена так, как я хотел.

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

Ответ 2

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

  • Установите Node и плагин параметров метки
  • В конфигурации test_job выберите "Эта сборка параметризирована" и добавьте параметр Node и установите имя параметра node_name
  • В конвейере добавьте параметр Choice, назовите его node, поставьте туда возможные варианты, так что вы можете выбрать конвейер, на котором Node он должен быть запущен.

Код для вставки в конвейер script:

build job: 'my_job', 
  parameters: [[$class: 'NodeParameterValue', name: 'node_name', labels: ["$node"], nodeEligibility: [$class: 'AllNodeEligibility']]]

Ответ 3

Я только что протестировал это при моей установке, и он правильно запускал каждый script на каждом node. Возможно, вы захотите проверить правильность настройки своих подчиненных. Я считаю, что в документации говорится, что они должны иметь ведомых агентов Launch через настройку Java Web Start, вы можете убедиться в этом.