Запуск роботи Дженкінса одночасно на всіх вузлах

У мене є велика група вузлів з однаковими мітками. Я хотів би мати можливість запустити роботу в Дженкінс, яка виконує всі вузлів з тією ж етикеткою, як і одночасно.

Я побачив пропозицію використати параметр матричної конфігурації в Jenkins, але я можу лише думати про одну вісь (групу міток). Коли я намагаюся запустити завдання, вона, як видається, виконується лише один раз замість 300 разів (1 для кожного з вузлів у цій групі міток).

Що повинна бути моєю іншою осі? Або ... чи є який-небудь плагін для цього? Я спробував виправити плагін NodeLabel Parameter і вибрати "запустити на всіх доступних вузлах Інтернету", але, здається, не виконує завдання одночасно.

19
Чи є ще один спосіб додавання вузлів до роботи без редагування файлу resources.xml? Зрештою ми збільшимося до тисячі вузлів, і додавання їх вручну до файлу xml трохи втомлює, особливо тому, що вузли можуть змінюватися. Крім того, Rundeck, схоже, має багато функцій, які я хочу.
додано Автор user2406467, джерело
@ MarkO'Connor - Я думаю, що Rundeck може виконати те, що ми робимо, а потім :) Ми зрештою будемо використовувати EC2. Якщо ви хочете додати свої відповіді як відповідь, я маю змогу прийняти це. Дякую!
додано Автор user2406467, джерело

8 Відповіді

Матрична побудова буде працювати; використовуйте "Раби" як вісь і розгорніть список "Індивідуальні вузли", щоб вибрати всі свої вузли.

Зверніть увагу, що вам доведеться оновлювати вибір кожного разу, коли ви додасте або видаляєте підлеглий.

Щоб отримати більш ретельне обслуговування, ви можете скористатись робочем плагіном DSL щоб створити насіннєву роботу, яка має шаблон для збірки, а потім цикли по кожному веденню і створює нове завдання, використовуючи мітку створення, яка встановлюється на ім'я ведомого.

12
додано
@ ^ ^ ^ Ось хороший вступ до Job DSL, який трохи демистифікуватиме: youtube.com/ дивитися? V = Gyccyj6lA8k
додано Автор dyodji, джерело
Необхідно вибрати окремі вузли дуже незручно, бачачи, як ми хочемо в певний момент збільшити до декількох тисяч. Я подивився на плагін Job DSL і зміг створити одну роботу, але я не бачу, як повторити кожен раб. Також ... Мені здається, що після створення робочих місць мені все одно доводиться виконувати їх вручну.
додано Автор user2406467, джерело

Вам потрібні два плагіни: Paramitrized Trigger Plugin бути здатний запускати інші завдання як етап побудови вашої основної роботи, а також NodeLabel плагін (ознайомтесь з розділом BuildParameterFactory для визначення необхідності), щоб вказати мітку.

11
додано
  1. Install
  2. For the job you want to run, enable Execute concurrent builds if necessary
  3. Create another job besides the job you want to run on all slaves and configure it
    • Build > Add build step > Trigger/call builds on other projects
      • Add ParameterFactories > All Nodes for Label Factory > Label: the label of the nodes
10
додано
Це правильна відповідь.
додано Автор Brian Lenoski, джерело

The best and easiest way to accomplish this is using Elastic Axis plugin.
1. Install the pulgin.
2. Create a Multi Configuration job.(Install if not present)
3. In the job configuration you can find new axis added as Elastic axis. Add the label as shown below to get the job run on multiple slaves. enter image description here

8
додано
точка етикетки - це можливість групувати їх разом, коли масштабування, просто переконайтеся, що є літер, тобто 'script-1', і він буде додаватися до осі
додано Автор Edward M Meshuris, джерело
Це не працює. Встановлення однієї мітки на осі побудуватиме роботу на одному вузлі з цією міткою.
додано Автор jwg, джерело
Мені це здається єдиною прийнятною відповіддю
додано Автор Nicolas Mommaerts, джерело
Так, він будуватиме роботу на цьому єдиному вузлі. Зазвичай ми маємо етикетки, які є загальними, тобто декілька вузлів використовують одне і те ж назву мітки відповідно до їх використання. (ми не використовуємо унікальні назви міток для всіх вузлів, оскільки ім'я вузла вже є унікальним і служить для цієї мети). Крім того, ви можете вказати декілька назв міток у текстовій області. Це єдине рішення, яке я знайшов. Будь-ласка, допоможіть мені, якщо у вас є краще рішення для цього.
додано Автор Amol Manthalkar, джерело

Отримано - Немає необхідності в спеціальному плагіні!

Я створив батьківську роботу, яка запускає/викликає іншу збірку І коли я кличу його, я передаю йому мітку , що я не можу працювати над дитиною.

Отже, в основному батьківська робота запускає тільки потрібну роботу, і робота дитини буде виконуватися стільки разів, скільки кількість рабів в мітці (У моєму випадку 4 рази).

enter image description here

7
додано
@ldnunes Ні. Збірка не закінчиться, поки вона не буде працювати на всіх вузлах цього ярлика (звичайно, тільки підключені раби)
додано Автор Shachar Hamuzim Rajuan, джерело
Що відбувається, коли вузол вибраної мітки займає надто багато часу, щоб запустити одну з сформованих збігів? Чи не буде він запускатися на іншому вузлі тієї самої ярлика, яка вже запускає активацію збірки?
додано Автор Hasse1987, джерело
Для цього потрібен параметризований тригер + вузловий параметр плагіна параметра для тих, хто не може знайти ці параметри в їх Дженкінс (тобто я).
додано Автор medwards, джерело
7
додано

Взяти декілька з наведених вище відповідей та налаштовуючи їх для серії 2.0.

Тепер ви можете запустити всю роботу на всіх вузлах.

// The script triggers PayloadJob on every node.
// It uses Node and Label Parameter plugin to pass the job name to the payload job.
// The code will require approval of several Jenkins classes in the Script Security mode
def branches = [:]
def names = nodeNames()
for (int i=0; i node.name }
}

Taken from the code https://jenkins.io/doc/pipeline/examples/#trigger-job-on-all-nodes

5
додано

Enable This project is parameterized, add a parameter of type Label, enter an arbitrary name for the label and select a default value such as a label covering a number of nodes or a conjuction (&&) of such labels. Enable Run on all nodes matching the label, keep Run regardless of result, keep Node eligibility at All nodes.

enter image description here

1
додано