Groovy 比较Jenkins管道中的日期

Groovy 比较Jenkins管道中的日期,groovy,jenkins-pipeline,jenkins-groovy,Groovy,Jenkins Pipeline,Jenkins Groovy,我需要比较管道中的日期。这很有趣,下面的代码在Jenkins的Groovy脚本控制台中可以正常工作,但在管道中不行: 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" } 在管道中,这为我

我需要比较管道中的日期。这很有趣,下面的代码在Jenkins的Groovy脚本控制台中可以正常工作,但在管道中不行:

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()
我试图更改新日期()。解析日期。解析,但它存在于:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:未找到此类静态方法: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:解决方案

代码似乎是在没有“def”限定符的情况下粘贴到管道中的。通过反复试验,我缩小了范围,要求它至少有def dateFormat其他VAR不需要这样做。看起来所有可序列化变量都需要通过“def”定义


我现在就不谈了,也许sb会从中受益。

在使用日期字符串更改为一个参数后,我得到了java.lang.IllegalArgumentException。正如我提到的,当从Jenkins groovy控制台运行时,所讨论的代码使用2个参数,但无法从Jenkins管道中运行。我宁愿避免将大量java类导入到我的管道脚本中。我认为您应该阅读以下答案:谢谢,我修改了代码以适应该模型,但在Jenkins管道中仍然没有运气…在更改为带有日期字符串的一个参数后,我得到了java.lang.IllegalArgumentException。正如我提到的,当从Jenkins groovy控制台运行时,所讨论的代码使用2个参数,但无法从Jenkins管道中运行。我宁愿避免将大量java类导入到我的管道脚本中。我认为您应该阅读以下答案:谢谢,我修改了代码以适应该模型,但Jenkins管道中仍然没有运气。。。