Проверьте, подключен ли узел Дженкинс к работе, в противном случае отправьте уведомление по электронной почте - PullRequest
0 голосов
/ 21 мая 2018

Имея задание Jenkins, выделенное для специального узла, я хотел бы получить уведомление, если задание не может быть запущено, потому что узел находится в автономном режиме.Можно ли настроить эту функцию?

Другими словами, поведение Jenkins по умолчанию ожидает узла, если задание было запущено, когда узел находится в автономном режиме (состояние ожидания задания).В этом случае я хочу завершить (или вообще не запускать) задание и отправить письмо «узел в автономном режиме».

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

1 Ответ

0 голосов
/ 21 мая 2018

Я не думаю, что проверка доступности узла может быть выполнена внутри задания (например, JobX), которое вы хотите запустить.Акт проверки, особенно для вашего JobX во время выполнения, сам по себе будет нуждаться в работе для запуска - я не знаю опции плагина / конфигурации, которая сделает это.JobX не может проверить, свободен ли узел для JobX.

Я использую много потоковых заданий (в процессе преобразования в конвейерную логику), где JobA вызовет JobB,таким образом, JobA может работать на главной проверке узла на наличие JobB, JobX в вашем случае, вызывая его, если он включен.

JobA должен быть заданием вольного стиля и запускать 'execute system'groovy script> Groovy команда 'шаг сборки.Приведенный ниже Groovy-код взят из нескольких рабочих примеров, которые так и не были проверены:

import hudson.model.*;
import hudson.AbortException;
import java.util.concurrent.CancellationException;


def allNodes = jenkins.model.Jenkins.instance.nodes
def triggerJob = false
for (node in allNodes) {
  if ( node.getComputer().isOnline() && node.nodeName == "special_node" ) {
    println node.nodeName + " " + node.getComputer().countBusy() + " " + node.getComputer().getOneOffExecutors().size
    triggerJob = true
    break
  }
}

if (triggerJob) {
    println("triggering child build as node available")
    def job = Hudson.instance.getJob('JobB')
    def anotherBuild
    try {
        def params = [
          new StringParameterValue('ParamOne', '123'),
        ]
        def future = job.scheduleBuild2(0, new Cause.UpstreamCause(build), new ParametersAction(params))
        anotherBuild = future.get()
    } catch (CancellationException x) {
        throw new AbortException("${job.fullDisplayName} aborted.")
    }

} else {    
    println("failing parent build as node not available")
    build.getExecutor().interrupt(hudson.model.Result.FAILURE)
    throw new InterruptedException()
}

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

...