我有一个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。
答案 0 :(得分:3)
我怀疑Groovy脚本在构建主机上运行,而不是运行此特定构建的构建节点。我添加了一些调试来打印运行Groovy脚本的主机名,并且确定它不是脚本的shell变体运行的主机。