jenkins - 无法解决 Jenkins NotSerializableException 错误
问题描述
import hudson.model.*;
import hudson.AbortException;
import jenkins.model.Jenkins;
@NonCPS
def allNodes = jenkins.model.Jenkins.instance.nodes
def triggerJob = false
for (String node: allNodes) {
if ( node.getComputer().isOnline() && node.nodeName == "ABC" ) {
println node.nodeName + " " + node.getComputer().countBusy() + " " +
node.getComputer().isAcceptingTasks()
triggerJob = true
break
}
}
if (triggerJob) {
println("triggering build as node is available")
build job: 'jobName', parameters:
[
/** list of string Parameters **/
]
}
上面的作业触发了构建,但失败了:
发生的异常:在字段 hudson.model.Slave.launcher 中导致:java.io.NotSerializableException:hudson.slaves.JNLPLauncher
解决方案
您只能使用Serializable
在您的代码中实现接口的类 - 既不Node
也Computer
没有。为了使用它们,您需要将相应的代码封装在一个@NonCPS
方法中,例如:
import hudson.model.*;
import hudson.AbortException;
import jenkins.model.Jenkins;
@NonCPS
def shallTrigger() {
def triggerJob = true
def allNodes = jenkins.model.Jenkins.instance.nodes
for (String node: allNodes) {
if ( node.getComputer().isOnline() && node.nodeName == "ABC" ) {
println node.nodeName + " " + node.getComputer().countBusy() + " " +
node.getComputer().isAcceptingTasks()
triggerJob = true
break
}
}
}
if (shallTrigger) {
println("triggering build as node is available")
build job: 'jobName', parameters:
[
/** list of string Parameters **/
]
}
推荐阅读
- asp.net - 升级到 ASP.NET Zero (Angular) 中的 FontAwesome Pro/显示为正方形的远距离图标
- c++ - 如何在 Mac 上处理 VS Code 中的 C++ 头文件#include 错误?
- ios - 世博会推送通知 iOS APNS
- reactjs - React 放置自动完成多个类型的问题(Nextjs)
- c# - 我想通过单击将按钮移动到堆栈面板的最顶部
- python - 根据时间戳将数据帧拆分为多个子数据帧
- lustre - 如何为 MOFED 正确重建 Lustre
- c# - 单击保存按钮时发生未处理的异常
- angular - 可观察对象内的角度异步调用
- windows - 我运行我的第一个 tomcat,但出现错误,我该怎么办?