2014-11-04 2 views
0

У меня есть постсоветский постсозданный скрипт Groovy, выполняющийся из «Плагина заданий после сборки». Из того же плагина, непосредственно перед запуском скрипта Groovy, я проверяю наличие файла и его размер. В журнале:Groovy File() не сообщается правильный размер/длина

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 

заводной сценарий выглядит следующим образом:

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) 
    } 
} 

Что я здесь делаю неправильно?

Обновление: похоже, существует некоторый скептицизм в отношении того, что файл существует и что существует какое-то состояние гонки. Чтобы успокоить ваш разум, давайте это выберем. Я изменил сборку для выполнения той же команды ls -l после запуска скрипта groovy, чтобы доказать, что файл существует и что эта проблема в конечном счете 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

Вы уверены, что файл существует в этом месте? Результат '0' для метода' length() 'обычно означает, что файл не существует. Возможно, сначала попробуйте 'exist()' и 'canRead()' для проверки? –

+0

Вот почему я запустил сценарий оболочки как часть той же задачи сборки сообщений. Обратите внимание на строку 'ls -l' в выводе журнала, в которой показан файл и его размер. – Craig

+0

Gotcha, извините, я пропустил это. –

ответ

3

Я подозревал, что скрипт Groovy работал на мастере сборки, а не на узле сборки, в котором работала эта конкретная сборка. Я добавил отладку для печати имени хоста, для которого был запущен скрипт Groovy, и, конечно же, это был не тот же хост, что и сценарий оболочки сценария.

Смежные вопросы