当前位置: 首页 > 面试题库 >

Jenkins工作流构建期间如何修复NotSerializableException错误?

邰建业
2023-03-14
问题内容

当我在Jenkins工作流程(Jenkins 1.609.1,工作流程1.8)上运行以下代码时,出现“
NotSerializableException”错误(同样在下面)。但是,如果我将“构建作业”移到“
for”范围之外,则可以正常工作(该作业已激活)。任何想法为什么这种行为?

node('master') { 
ws('/opt/test) {
def file = "/ot.property"
def line = readFile (file)
def resultList = line.tokenize()
for(item in resultList )
  {
build job: 'testjob_1'
   }
 }
}

得到错误:

Running: End of Workflow 
java.io.NotSerializableException: java.util.ArrayList$Itr  
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
    at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)


.....

问题答案:

我thnk这是因为它试图序列化不可序列化item的迭代器resultList只要它击中了build job一步。有关使用不可序列化变量的指导,请参见此处:

https://github.com/jenkinsci/workflow-
plugin/blob/master/TUTORIAL.md#serialization-of-local-
variables

作为使用工作流插件进行安全迭代的一种解决方法,您需要使用C风格的循环。尝试以下方法:

for ( int i = 0; i < resultList.size; i++ ) {
  etc...


 类似资料:
  • 如何从Jenkins工作流groovy脚本中访问当前和相关的构建信息? 我可以看到像currentBuild这样的东西。结果和当前构建。previousBuild正在记录,但我看不到如何访问,例如: 当前生成作业的 URL。 此工作流触发的生成作业的 URL。 特定失败的生成作业的控制台输出等。 感谢任何指点。

  • 问题内容: 您如何从Jenkins工作流groovy脚本中访问当前以及相关的构建信息? 我可以看到有类似currentBuild.result和currentBuild.previousBuild之类的文档,但是我看不到如何访问,例如: 当前构建作业的URL。 此工作流程触发的构建作业的URL。 特定失败的构建作业的控制台输出,等等。 感谢您的指导。 问题答案: 将为您提供非缓存的对象,请参见hu

  • 在android a有一个URL像http://api.openweathermap.org/data/2.5/forecast/daily?q=khulna 所以我使用Uri构建器 但输出 http://api.openweathermap.org/data/2.5/forecast/daily?q=khulna 这里有两个额外的字符'&'和'='; 我将这个URI转换为字符串,并使用repla

  • 问题内容: 我是Jenkins / Hudson的新手,正在尝试从buildbot迁移基于C make的项目。由于遗留原因,构建系统被硬编码以在版本控制的源代码树(git)之外(在上面的一个目录中)在单独的目录中进行构建。例如: 除了最终在工作空间之外创建目录这一事实外,Jenkins不会识别上面build /目录中的项目以将其归档为工件。 如何使这种构建系统与Hudson一起使用?在源代码树中构

  • 问题内容: 在Jenkins管道中,当在特定节点上运行构建时,会在该代理上分配工作区。我们没有设置工作空间路径,因此它是自动确定的。我了解,当同一作业在同一代理上同时运行时,工作空间必须包含执行程序编号以隔离构建。 但是…工作空间路径究竟是如何构建的? 我们的构建被分配给一个特定的节点(具有4个执行程序),并且被配置为不允许并行构建。通常分配给它: 在某个时候,该构建开始在执行程序2上运行,但仍使

  • 学习詹金斯。Windows7运行Jenkins-2.73.3,一个maven项目会给出以下输出: 20:29:11[test]$“C:\程序文件\java\jdk1.8.0_102/bin/java”-xmx1024m-xx:maxpermsize=256m-cp“C:\程序文件(x86)\jenkins\plugins\maven-plugin\WEB-INF\lib\maven33-agent