0

Jenkins 没有报告我们的单元测试失败。这是我们在构建日志中看到的内容:

[JENKINS] Recording test results
hudson.AbortException: Test reports were found but none of them are new. Did tests run? 
For example, /home/tomcat/.jenkins/jobs/ws-main-gerrit/workspace/commons/commons-utils/target/surefire-reports/TEST-commons.utils.TransformationUtilsTest.xml is 32 min old

问题在于,当 Gerrit 触发 Jenkins 构建时,它会创建带有不正确(30 分钟前)时间戳的目标目录。Jenkins 和 Gerrit 所在服务器的时间是正确的。当我登录并手动进行 Maven 构建时,它会正确报告单元测试中的失败。

有什么想法可能导致问题吗?
提前致谢!

4

2 回答 2

2

问题是 Jenkins 所在的 NFS 没有使用 NTP(并且晚了大约 30 分钟),而系统的其余部分正在使用它。因此,这就是 date 命令返回正确时间戳但目标目录中的文件使用错误时间戳创建的原因。

于 2012-06-18T21:11:17.007 回答
0

这个答案帮助我确定了问题,但我决定改为实施一种解决方法。

我在 Jenkins 从站上运行了这个复合命令,以确定从站和它用于其工作区的 NFS 挂载之间存在差异:

$ date ; touch this ; ls -l this
Mon Nov 11 10:57:55 CST 2013
rw-rr- 1 davidg devtools 0 Nov 11 10:56 this

我在另一个 VM / NFS 挂载上尝试了相同的命令,但它具有相同的差异。我推测这是一个数据中心范围的问题,可能很难很快解决,所以我决定通过使用“-t”选项的 touch 命令手动更新文件的修改时间戳来解决这个问题。

我在“Execute Shell”构建步骤中添加了以下内容,Jenkins 终于对我有当前测试结果要发布感到满意:

#!/bin/bash
echo $(hostname)
echo "Touching test results so that the Publish JUnit test result plugin always finds  new results..."
touch -m -t $(date "+%Y%m%d%H%M.%S") ${WORKSPACE}/myjob/target/surefire-reports/*.xml
于 2013-11-11T17:17:55.890 回答