Groovy File()没有报告正确的大小/长度

时间:2014-11-04 09:33:07

标签: groovy jenkins

我有一个Jenkins post post构建的Groovy脚本用完了" Post构建任务插件"。在同一个插件中,在运行Groovy脚本之前,我检查文件是否存在及其大小。日志显示:

09:14:53 -rw-r--r-- 1 aaa users 978243 Nov  4 08:53 /jk/workspace/xxxx/output/delta.txt
09:14:53 cppcheck.groovy: Checking build result: SUCCESS
09:14:53 cppcheck.groovy: workspace = /jk/workspace/xxxx
09:14:53 cppcheck.groovy: delta = /jk/workspace/xxxx/output/delta.txt
09:14:53 cppcheck.groovy: delta.txt length = 0

groovy脚本如下:

import hudson.model.*

def build = Thread.currentThread().executable
def result = build.getResult()

println("cppcheck.groovy: Checking build result: " + result.toString())

if (result.isBetterOrEqualTo(hudson.model.Result.SUCCESS)) {
    def workspace = build.getEnvVars()["WORKSPACE"]
    def delta = workspace + "/output/delta.txt"

    println("cppcheck.groovy: workspace = " + workspace)
    println("cppcheck.groovy: delta = " + delta)

    def f = new File(delta)

    println("cppcheck.groovy: delta.txt length = " + f.length())

    if (f.length() > 0) {
        build.setResult(hudson.model.Result.UNSTABLE)
    }
}

我在这里做错了什么?

更新:似乎有人怀疑文件是否存在以及存在某种竞争条件。为了让你的思绪处于休息状态,让我们排除它。我修改了构建以在运行groovy脚本后执行相同的ls -l命令,以证明文件确实存在,并且此问题最终是Groovy无法打开文件。我还将文件exists()检查添加到上面的Groovy脚本中,我怀疑它会报告该文件不存在。我不反驳Groovy认为该文件不存在。我想解决的是为什么?

10:31:39 [xxxx] $ /bin/sh -xe /tmp/hudson8964729240493636268.sh
10:31:39 + ls -l /jk/workspace/xxxx/output/delta.txt
10:31:39 -rw-r--r-- 1 aaa users 978243 Nov  4 08:53 /jk/workspace/xxxx/output/delta.txt
10:31:40 cppcheck.groovy: Checking build result: SUCCESS
10:31:40 cppcheck.groovy: workspace = /jk/workspace/xxxx
10:31:40 cppcheck.groovy: delta = /jk/workspace/xxxx/output/delta.txt
10:31:40 cppcheck.groovy: delta.txt length = 0
10:31:40 cppcheck.groovy: delta.txt exists = false
10:31:40 [xxxx] $ /bin/sh -xe /tmp/hudson8007562636561507409.sh
10:31:40 + ls -l /jk/workspace/xxxx/output/delta.txt
10:31:40 -rw-r--r-- 1 aaa users 978243 Nov  4 08:53 /jk/workspace/xxxx/output/delta.txt

另外,请注意所述文件的时间戳,创建时仍为08:53。

1 个答案:

答案 0 :(得分:3)

我怀疑Groovy脚本在构建主机上运行,​​而不是运行此特定构建的构建节点。我添加了一些调试来打印运行Groovy脚本的主机名,并且确定它不是脚本的shell变体运行的主机。