Я не думаю, что проверка доступности узла может быть выполнена внутри задания (например, 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()
}
Чтобы отключить электронную почту узла, вы можете просто запустить действие после сборки, чтобы отправлять электронные письма при сбое.