我们有使用vSphere的脚本,可将快照还原到计算机并打开。
然后我们检查代理商是否可用:
def checkAgentAvalability(agName, tolerance) {
try {
int sleepTime = 5
def jenkinsObj = Jenkins.instance.getNode(agName)
printLogger("INFO", "checkAgentAvalability() Agent: " + agName + ", tolerance: " + tolerance)
handleSlaveMode(agName, false)
sleep (5000)
for (int i = 0; i < tolerance; i++) {
if (jenkinsObj.toComputer().isOnline()) {
if (jenkinsObj.getRootPath() != null && !jenkinsObj.getComputer().getLog().contains('error'))
{
return true
} else {
sleep (5000)
}
}
sleep (5000)
}
return false
}
catch (err)
{
return false
}
}
我们使用此脚本启动30台计算机,并准备进行测试。
除了以下例外,我们在随机计算机上遇到了故障:
java.io.NotSerializableException: hudson.slaves.JNLPLauncher
如何解决此问题?我找不到互联网的根本原因。
如何检查自动创建的代理是否启动?代理启动后,有时我们也会断开连接
谢谢
答案 0 :(得分:0)
您应该使用@NonCPS
annotation。通常,Jenkins假定所有对象都是可序列化的,因为它想暂停/恢复作业。如果不是(例如Computer
),则它们需要一些特殊的元数据,因此Jenkins会知道。
@NonCPS
def checkAgentAvalability(agName, tolerance) {
try {
...