Как запустить 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, вы можете убедиться в этом.