Моя стратегия состоит в том, чтобы отключить узел, как только ваше задание buyild поймает исполнителя, а затем дождаться завершения всех остальных исполнителей. На этом этапе ваш исполнитель все еще активен, но другие исполнители не могут получить новую сборку, так как он находится в автономном режиме, поэтому узел предназначен для вас самих. Когда вы закончите, вы можете снова пометить узел онлайн. Это требует серьезного одобрения администратора для сценария.
Например:
final int sleeptimeSeconds = 10
final String agentname = 'node-1'
echo "Waiting for an executor for ${agentname}..."
node(agentname) {
try {
timeout(time: timeoutminutes, unit: 'MINUTES') {
markAgentOnlineOfOffline(agentname, false)
sleep 5
Computer computer = Jenkins.getInstance().getComputer(agentname)
echo "Waiting for other executors to complete on ${agentname}..."
while (computer.countBusy() > 1) {
sleep sleeptimeSeconds
}
echo "Ready to do work on '${agentname}' in exclusive mode..."
...
}
} catch (e) {
markAgentOnlineOfOffline(agentname, true)
throw e
}
}
def markAgentOnlineOfOffline(String nodeName, boolean online) {
...
}
Эта последняя функция markAgentOnlineOfOffline
может быть реализована логически (например, я сам использую метку "offline") , что мои работы отклоняют (например, требование метки включает !offline
). Но вы можете использовать API Jenkins, чтобы отметить узел действительно в автономном режиме.