Сравнение дат в трубопроводе Дженкинс - PullRequest
0 голосов
/ 28 октября 2019

Мне нужно сравнить даты в конвейере. И это весело, следующий код работает нормально в консоли сценариев 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 выиграет от этого.

...