我正在使用 groovy 的管道中工作,我通过 find operator 发现了这个问题,其中所有解决方案都不起作用。
在此代码之后:
stage('Get build artifacts') {
def buildNumber = (params.BUILD_VERSION =~ /^.*-b(\d*)-(.*$)/)
我执行 wget 来下载工件,但出现此错误
an exception which occurred:
in field com.cloudbees.groovy.cps.impl.BlockScopeEnv.locals
in object com.cloudbees.groovy.cps.impl.BlockScopeEnv@325d4820
in field com.cloudbees.groovy.cps.impl.CpsClosureDef.capture
in object com.cloudbees.groovy.cps.impl.CpsClosureDef@31fe6d7d
in field com.cloudbees.groovy.cps.impl.CpsClosure.def
in object org.jenkinsci.plugins.workflow.cps.CpsClosure2@68074406
in field org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.closures
in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@4842ad69
in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@4842ad69
Also: org.jenkinsci.plugins.workflow.actions.ErrorAction$ErrorId: a9fb8438ab8f-4ab2-9ee7-83b8f48ed2d3
Caused: java.io.NotSerializableException: java.util.regex.Matcher
我的内部版本号需要类似于 1.0.0-b1-master,但失败了,我找不到解决方案。大多数好奇心是因为这段代码在一个詹金斯中工作,而创建第二个现在失败了。想法?
谢谢!
基本上是错误所说的 -
Matcher
不可序列化。为什么这是一个问题?这是 Jenkins 文档中的简短答案:
局部变量在序列化期间被捕获为管道状态的一部分。这意味着在管道执行期间将不可序列化的对象存储在变量中将导致抛出 NotSerializedException。
如果你想了解更多,你可以用谷歌搜索 CPS 是什么,但那个兔子洞相当深。对于您的情况,这可能是最快的解决方法:
def buildNumber = (params.BUILD_VERSION =~ /^.*-b(\d*)-(.*$)/)[0][1]