我正在尝试从 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 引起的,它序列化所有管道执行以存储为可恢复状态。
对不可序列化方法的调用必须包装在用 @NonCPS
注释的方法中:
@NonCPS
String getVersion(String binaryName) {
def matches = (binaryName =~ /(V)(\d+)(_)(\d+)(_)(Build)(_)(\d+)/)
versionTag = ""+matches[0].getAt(0)
versionTag
}
现在可以从您的管道中调用此方法。如果您的 Jenkins master 在执行此方法期间重新启动,它将完全运行它 - 在许多情况下,例如您的情况,绝对没有问题。
关于java - Jenkins groovy 正则表达式匹配字符串 : Error: java. io.NotSerializableException : java. util.regex.Matcher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47646409/