首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jenkinsfile中的NotSerializableException

jenkinsfile中的NotSerializableException
EN

Stack Overflow用户
提问于 2018-06-14 19:01:21
回答 1查看 11K关注 0票数 6

我正在开发一个jenkinsfile,在第三阶段我得到了一个异常:

代码语言:javascript
复制
an exception which occurred:
in field com.cloudbees.groovy.cps.impl.BlockScopeEnv.locals
in object com.cloudbees.groovy.cps.impl.BlockScopeEnv@7bbae4fb
in field com.cloudbees.groovy.cps.impl.ProxyEnv.parent
in object com.cloudbees.groovy.cps.impl.CaseEnv@6896a2e3
in field com.cloudbees.groovy.cps.impl.ProxyEnv.parent
in object com.cloudbees.groovy.cps.impl.BlockScopeEnv@605ccbbc
in field com.cloudbees.groovy.cps.impl.CallEnv.caller
in object com.cloudbees.groovy.cps.impl.FunctionCallEnv@7b8ef914
in field com.cloudbees.groovy.cps.Continuable.e
in object org.jenkinsci.plugins.workflow.cps.SandboxContinuable@11e73f3c
in field org.jenkinsci.plugins.workflow.cps.CpsThread.program
in object org.jenkinsci.plugins.workflow.cps.CpsThread@b2df9bb
in field org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.threads
in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@2b30596a
in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@2b30596a
Caused: java.io.NotSerializableException: java.util.regex.Matcher
    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
    at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65)
    at org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56)

我一直在读它,我知道我不能创建不可序列化的变量。因此,我认为它必须与我的这部分代码:

代码语言:javascript
复制
def artifact_name = sh (
        script: "ls -b *.jar | head -1",
        returnStdout: true
).trim()
def has_snapshot = artifact_name =~ /-TEST\.jar/
if (has_snapshot) {
    //Do something
}

我的问题是,我如何定义这两个变量,以避免这种异常?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-14 22:09:11

你的问题是这一行:

代码语言:javascript
复制
def has_snapshot = artifact_name =~ /-TEST\.jar/

=~就是Groovy find operator。它返回一个非Serializablejava.util.regex.Matcher实例。如果Jenkins决定在将结果存储在Jenkins序列化的本地变量中之后暂停脚本,也就是当您获得异常时。这可以通过在调用后立即添加sleep(1)步骤来轻松测试,并在抛出相同的异常时进行观察。

要解决此问题,您应该:

  • 不将java.util.regex.Matcher结果存储在CPS转换后的代码中
  • 将用法移入@NonCPS注释的方法或使用match operator (==~) which returns a boolean (如果它适合您的用例)
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50855961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档