Удалить все Jenkins offline nodes/slaves в Unix/Linux

При использовании слейвов в дженкинсе, всегда есть вероятность что какая-то из нод, — отпадет из-за какой-то из причин (Например: проблемы с сетью; закрылся порт). А если это ПРОД сервер и там должны собираться проекты. То за некоторый промежуток времени у вас может собраться большое количество выключенных машин.

Полезное чтиво:

Установка Jenkins и Jenkins-slave в Unix/Linux

Автосборка Java проектов через Jenkins в Unix/Linux

Настройка языка в Jenkins

Разграничение прав доступа в Jenkins

Мониторинг места на сервере через Jenkins

Настройка темы для Jenkins

Изменить/Поменять пароль для пользователя Jenkins

Создание Jenkins backup/restore в Unix/Linux

Автосборка Java проектов через Jenkins в Unix/Linux

Я нашел пару решений как это можно сделать. Покажу на наглядных примера как мне удалось убить больше 1.5к зомби-нод.

Удалить все Jenkins offline nodes

Так, одним из способов удалить все офлайн-хосты — это выполнить груви-скрипт через дженкинс консоль. Для этого, нужно зологиниться в сам дженкинс, затем кликнуть по «Manage Jenkins» и перейти в «script Console»:

В само поле со скриптом, вставить:

Closure query = { it.name ==~ /^.*$/  }
Closure action = {
  println('====================')
  println("Name: ${it.name}")
  println("LabelString: ${it.labelString}")
  println("NumExectutors: ${it.numExecutors}")
  println("RemoteFS: ${it.remoteFS}")
  println("Mode: ${it.mode}")
  println("RootPath: ${it.rootPath}")
  println("Offline: ${it.computer.offline}")
  
  if (it.computer.offline) {
    println("Deleting node: ${it.name}")
    it.computer.doDoDelete()
  }
}

Jenkins.instance.slaves.findAll(query).each(action)
return

Нажимаем на «RUN» и если много хостов, — это занимает некоторое время. Данный пример — полностью использовался на ПРОД серверах компании где работаю.

Удалить все Jenkins offline slaves

Проверил другой подход скрипта на груви. Полностью рабочий вариант. Чтобы удалить все офлайн-слейвы, нужно зологиниться в сам дженкинс, затем кликнуть по «Manage Jenkins» и перейти в «script Console»:

В само поле со скриптом, вставить:

for (aSlave in hudson.model.Hudson.instance.slaves) {
    if (aSlave.getComputer().isOffline()) {
        aSlave.getComputer().setTemporarilyOffline(true,null);
        aSlave.getComputer().doDoDelete();
    }
}

Нажимаем на «RUN» и если много хостов, — это занимает некоторое время. Данный пример — полностью использовался на ПРОД серверах компании где работаю.

Мне данные решения помогли и они полностью рабочие. Еси будут еще идеи чем можно дополнить — обязательно дополню данную тему.

Вот и все, статья «Удалить все Jenkins offline nodes/slaves в Unix/Linux» завершена.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.