pog*_*man 3 java regex groovy jenkins jenkins-pipeline
我试图从groovy中的正则表达式中获取匹配的字符串.匹配的字符串打印到控制台没有问题,但是当我尝试在git命令中使用匹配的字符串时,我收到以下错误:
Err: Incremental Build failed with Error: java.io.NotSerializableException: java.util.regex.Matcher
Run Code Online (Sandbox Code Playgroud)
这是代码:
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")
Run Code Online (Sandbox Code Playgroud)
如何从正则表达式中获取匹配的字符串?
此问题是由Jenkins的CPS引起的,该CPS将所有管道执行序列化以存储为可恢复状态.
对非可序列化方法的调用必须包含在注释为的方法中@NonCPS:
@NonCPS
String getVersion(String binaryName) {
def matches = (binaryName =~ /(V)(\d+)(_)(\d+)(_)(Build)(_)(\d+)/)
versionTag = ""+matches[0].getAt(0)
versionTag
}
Run Code Online (Sandbox Code Playgroud)
现在可以从管道中调用此方法.如果您的Jenkins主机在执行此方法期间重新启动,它将完全贯穿它 - 这在很多情况下,例如您的,绝对没有问题.