我正在尝试从groovy的正则表达式中获取匹配的字符串。匹配的字符串可以毫无问题地打印到控制台,但是当我尝试在git命令中使用匹配的字符串时,出现以下错误:
Err: Incremental Build failed with Error: java.io.NotSerializableException: java.util.regex.Matcher
这是代码:
def binaryName = "298_application_V2_00_Build_07.hex" def matches = (binaryName =~ /(V)(\d+)(_)(\d+)(_)(Build)(_)(\d+)/) versionTag = ""+matches[0].getAt(0) echo "${matches}" echo "$versionTag" bat("git tag $versionTag") bat("git push origin --tags")
如何从正则表达式中获取匹配的字符串?
此问题是由Jenkins的CPS引起的,该CPS将所有管道执行序列化以存储为可恢复状态。
不可序列化方法的调用必须包装在带有以下注释的方法中@NonCPS:
@NonCPS
@NonCPS String getVersion(String binaryName) { def matches = (binaryName =~ /(V)(\d+)(_)(\d+)(_)(Build)(_)(\d+)/) versionTag = ""+matches[0].getAt(0) versionTag }
现在可以从管道中调用此方法。如果您的Jenkins主服务器在执行此方法期间重新启动,它将完全通过它运行-在许多情况下(例如您的情况),绝对没有问题。