Обновите версию после semver с groovy в Jenkinsfile - PullRequest
0 голосов
/ 13 февраля 2020

В настоящее время я пытаюсь автоматизировать управление версиями моего проекта maven с помощью задания Jenkins (версия 2.190.3) и после SemVer. Итак, у меня есть свой Jenkinsfile, и я делаю что-то вроде этого:

script {
   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"}
}

Ожидается, что 1.3.0 в newVersion . Код выглядит нормально, работает на веб-консоли, но когда я использую Jenkins, у меня появляется следующая ошибка:

java .lang.NullPointerException: Невозможно выполнить null + 1

Я что-то не так делаю?

1 Ответ

0 голосов
/ 13 февраля 2020

Почти точный ответ на ваш вопрос дан в этом посте: 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()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...