Как проверить, работает ли исполнитель в Jenkins

#jenkins #jenkins-pipeline

Вопрос:

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

ЕСЛИ

запускается сборка задания-A, ЗАТЕМ
Используйте Environment_Variable_1
ИСПОЛЬЗУЙТЕ Исполнителя-1 для задания-A
, ИНАЧЕ, ЕСЛИ
ЗАДАНИЕ-A выполняется на Исполнителе-1 И сборка ЗАДАНИЯ-A запускается снова
, ЗАТЕМ
Используйте Environment_Variable_2
ИСПОЛЬЗУЙТЕ Исполнителя-2 для задания-A

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

Ответ №1:

есть ли способ проверить в конвейере Дженкинса, выполняет ли исполнитель задание?

ДА. С jenkins.model.Jenkins.instance.nodes помощью вас можно получить все настроенные узлы. Из этих узлов вы можете получать Computer объекты с node.toComputer() помощью . Из Computer объекта можно извлечь все Executors , что находится на этом компьютере.

 for (node in jenkins.model.Jenkins.instance.nodes) {
  def computer = node.toComputer()   /* computer behind the node */
  def executors = computer.getExecutors()
  for (executor in executors) {
    println("Node name: "   node.getDisplayName())
    println("Computer name: "   computer.getDisplayName())
    println("Executor name: "   executor.getDisplayName())
    println("Executor number: "   executor.getNumber())
    println("Is executor busy: "   executor.isBusy())
  }
}
 

Документация Jenkins Core API:
Класс Узел
Класс Компьютерный
Класс Исполнитель

Комментарии:

1. Вау. Большое спасибо. Это именно то, что я искал. Я буду читать документацию дальше, чтобы выяснить, есть ли способ проверить, какое задание выполняется на исполнителе.

2. Может ли это быть реализовано непосредственно в сценарии конвейера?

3. Я реализовал его на этапе разработки, и это сработало для меня. Если это не работает для вас, вы можете реализовать его в функции за пределами конвейера и вызвать функцию на этапе.

4. Можно ли найти, на каком исполнителе выполняется задание. Выполняется ли Задание Исполнителем 1 или Исполнителем 2?