我们只是将我们的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
答案 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