Jenkins CI中的groovy日期格式错误

时间:2015-05-26 09:31:41

标签: groovy jenkins


我们只是将我们的CI平台(jenkins v1.538)从WinSrv2003迁移到WinSrv2008,将所有作业和配置文件从旧服务器复制并粘贴到新服务器上。之后所有工作都运行良好,除了一个常规的工作。这里我们得到了日期格式错误。语言和区域设置正确(两台服务器上的区域和日期设置相同)。我们还尝试在代码中强制使用正确的格式,但jenkins仍会抛出以下错误:

FATAL: java.util.Date cannot be cast to java.lang.String
java.lang.ClassCastException: java.util.Date cannot be cast to java.lang.String
at java.lang.String.compareTo(Unknown Source)
at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.compareToWithEqualityCheck(DefaultTypeTransformation.java:599)

groovy代码:

import hudson.model.*
import hudson.FilePath
import groovy.xml.MarkupBuilder
import java.text.SimpleDateFormat
...
def tsformat = "yyyy-MM-dd HH:mm:ss"
def to_ts_format = new SimpleDateFormat(tsformat)
def from_integrity_format = new SimpleDateFormat ("MMM dd, yyyy hh:mm:ss aa")

.....
try {
...
  xml.changereport (job:srcjobname, time:today.format (tsformat), predecessortime:predectime.format (tsformat)) {

for (def b in builds) {       
  b_no = b.getNumber ()
  if (b_no < from || b_no > to) {
    println ("Skipped build: " + b_no)
    continue
  } else {
    println ("Processing build: " + b_no)
  }

  buildinfo (number:b.number, time:b.getTime ().format (tsformat)) {
    for (cs in b.changeSet) {
      for (ci in cs) {
        citime =  from_integrity_format.parse (ci.date)
        if (citime > predectime) {
        ...

在if条件下,将抛出错误。

Java-version(1.7.0),jenkins,groovy插件等运行的版本与旧服务器上的版本相同。乔布斯和groovy-scrip哪里没有改变。有什么我们忘了在jenkins或服务器端配置?

谢谢Steffen

1 个答案:

答案 0 :(得分:0)

这可能发生在线上: buildinfo (number:b.number, time:b.getTime ().format (tsformat)) b.getTime()返回一个DateTime对象,您尝试将其格式化为字符串(tsFormat

可能发生这种情况的另一个地方是:  citime = from_integrity_format.parse (ci.date) 请确保parse()期望ci.date的类型,可能需要字符串,并且您为其提供Date