Почти точный ответ на ваш вопрос дан в этом посте: Jenkins groovy Строка соответствия регулярному выражению: Ошибка: java .io.NotSerializableException: java .util.regex.Matcher
То, что сводится к тому, что сценарий, выполненный Дженкинсом, является своего рода groovy, но выполняется не совсем так, как есть. Сначала он преобразуется в сериализуемое состояние (может быть приостановлено, сохранено в файл, перенесено, восстановлено, возобновлено).
Это не работает с определенными объектами, которые имеют состояние, но не сериализуемы, включая java.util.regex.Matcher
, который работает под капотом вашего регулярного выражения. Если вы поместите этот код в метод, помеченный @NonCPS
, код не преобразуется и (более менее) выполняется как обычный groovy.
@NonCPS
def foo() {
def version = "1.2.4"
def pattern = ~/(\d{1,3})\.(\d{1,3})\.\d{1,4}$/
def newVersion = version.replaceFirst(pattern) { _,major,minor -> "${major}.${(minor as int) + 1}.0"}
println "Version ${version} -> new ${newVersion}"
}
script {
foo()
}