Gerrit触发Jenkins构建时目标目录上的时间戳不正确

时间:2012-06-15 14:56:29

标签: unit-testing maven jenkins gerrit

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构建时,它会正确报告单元测试中的失败。

任何可能导致问题的想法?
提前谢谢!

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

我在Jenkins slave上运行了这个复合命令,以确定slave和它用于工作空间的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”选项手动更新文件的修改时间戳来解决问题。

我将以下内容添加到“执行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