Мне нужно сравнить даты в конвейере. И это весело, следующий код работает нормально в консоли сценариев Groovy в Jenkins, но не в конвейере:
def created = new Date().parse("yyyyMMdd", "20191012")
def now = new Date().minus(30)
println created
println now
if (now > created) {
println "blah"
} else {
println "foo"
}
В конвейере это дает мне следующий вывод:
hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: java.util.Date.parse() is applicable for argument types: (java.lang.String, java.lang.String) values: [yyyyMMdd, 20191017]
Possible solutions: parse(java.lang.String, java.lang.String), parse(java.lang.String), parse(java.lang.String, java.lang.String, java.util.TimeZone), wait(), clone(), any()
Я пытался изменить new Date (). Parse на Date.parse , но он существует с:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: No such static method found: staticMethod java.util.Date parse java.lang.String java.lang.String
Как ядолжны сравнивать даты тогда?
РЕДАКТИРОВАТЬ: Переработка с использованием LocalDate
import java.time.LocalDate
import java.time.format.DateTimeFormatter
def due = 15
def creation_date = "20191012"
def dateFormat = DateTimeFormatter.ofPattern("yyyyMMdd")
def now = LocalDate.now().format(dateFormat);
def creation = LocalDate.parse(creation_date, dateFormat)
if (LocalDate.parse(now, dateFormat).minusDays(due) > creation) {
println "blah"
} else {
println "foo"
}
Работает на консоли Groovy, не работает в конвейере, выдает ошибку:
an exception which occurred:
in field org.jenkinsci.plugins.pipeline.modeldefinition.withscript.WithScriptScript.script
in object org.jenkinsci.plugins.pipeline.modeldefinition.agent.impl.LabelScript@55030b9c
in field groovy.lang.Closure.delegate
in object org.jenkinsci.plugins.workflow.cps.CpsClosure2@23e9719e
in field groovy.lang.Closure.delegate
in object org.jenkinsci.plugins.workflow.cps.CpsClosure2@165471ce
in field org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.closures
in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@124c8a1d
in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@124c8a1d
Caused: java.io.NotSerializableException: java.time.format.DateTimeFormatter
Теперь я совершенно озадачен тем, как с этим справиться ...
EDIT2: SOLUTION
Похоже, что код был вставлен в конвейер без определителей 'def'. Методом проб и ошибок я сузил, что для этого требовалось, по крайней мере, def dateFormat , а другие переменные для этого не требовались. Похоже, что все сериализуемые переменные должны быть определены через 'def'.
Я оставляю это как есть, возможно, sb выиграет от этого.