java - Jenkins groovy 正则表达式匹配字符串 : Error: java. io.NotSerializableException : java. util.regex.Matcher

标签 java regex jenkins groovy jenkins-pipeline

我正在尝试从 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/

相关文章:

regex - 只获取正则表达式中的第一个匹配项

sql-server - SQL Server 字符串的正则表达式替换为 unicode 前缀

docker - 从Jenkins运行Docker Build,用参数替换Dockerfile中的硬编码输入

jenkins - 如何在 Jenkins 构建之前自动合并 Git 分支?

javascript - YUIcompressor 指令前缺少分号

python - 正则表达式过滤列表中的项目,只包含那些包含非 a-z 字符的项目

java - 是否可以使用通配符创建路由?

Jenkins 管道 : Hide selected parameters in 'Build with Parameters'

java.lang.NoClassDefFoundError : android. 媒体.ThumbnailUtils

java - 完全数法