2016-03-04 4 views
1

Я пытаюсь прочитать файл в рабочей области. Файл был создан на предыдущем шаге (вызовом сценария оболочки для java). Я подтвердил, что он существует. Я использую 'readFile'. Я получаю исключение ниже. Я могу получить доступ к этому файлу в сценарии оболочки, но я хочу сделать разбор json и гораздо лучше использовать groovy. Есть ли какая-то безопасность в игре, препятствующая доступу?Рабочий процесс Jenkins - filenotfound для файла рабочей области

java.io.FileNotFoundException: /var/lib/jenkins/jobs/MBTest/branches/develop/workspace/functional-tests/target/scalatestcuke-F63QUALZN4.json 
(No such file or directory) 
at java.io.FileInputStream.open(Native Method) 
at java.io.FileInputStream.<init>(FileInputStream.java:146) 
at hudson.FilePath.read(FilePath.java:1751) 
at org.jenkinsci.plugins.workflow.steps.ReadFileStep$Execution.run(ReadFileStep.java:87) 
at org.jenkinsci.plugins.workflow.steps.ReadFileStep$Execution.run(ReadFileStep.java:81) 
at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.java:49) 
at hudson.security.ACL.impersonate(ACL.java:213) 
at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:47) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:745) 

Jenkinsfile (слегка вырублены)

#!groovy 
// Execute the following steps on the master 


node { 

stage name: 'Checkout', concurrency: 1 

checkout scm 
functionalTest() 
release() 
} 


def functionalTest(){ 

stage name: 'QA', concurrency: 1 

echo "nonrestF63" 
sh scalatestScript("F63QUALZN4","latest",5922,"-l jhc.TDRest") 

archive includes: 'functional-tests/target/*.json' 

def job = build job: 'generic-cucumber-report', parameters: [ 
    [$class: 'StringParameterValue', name: 'projectname', value: 'MBTest/develop'], 
    [$class: 'StringParameterValue', name: 'jsondir', value: 'functional-tests/target']] 

step ([$class: 'CopyArtifact', 
     projectName: 'generic-cucumber-report', 
     filter: 'target/cucumber-html-reports/**/*', 
     selector: [$class: 'SpecificBuildSelector', buildNumber: job.getId()]]); 

publishHTML(target: [allowMissing: false, keepAll: true, reportDir: 'target/cucumber-html-reports/', 
     reportFiles: 'feature-overview.html', reportName: 'Test results']) 

def failures = countFailures() 
if(failures > 0){ 
    error '${failures} test failures reported' 
} 
} 

def countFailures() { 
    sh "ls functional-tests/target/*.json | sed -e ':a' -e 'N' -e '\$!ba' -e 's/\\n/,/g' > filelist.txt" 
    def txt = readFile "filelist.txt" 
    def count = 0 
    txt.split(",") each { jsonFile -> 
    def text = readFile jsonFile 
    def json = new groovy.json.JsonSlurper().parseText(text) 
    count = count + countMatches(json,"status","failed") 
    } 
    return count 
} 

вопрос можно увидеть в методе countfailures. Я прочитал список файлов из WS и прокрутил имена. Когда я пытаюсь прочитать их, хотя я получаю FNF.

+0

Можете ли вы опубликовать шаг readfile? –

+0

И код, окружающий его, я должен был добавить. –

+0

Извините за задержку, либо я не знаю, как устанавливать уведомления о обновлениях SO-потоков, либо у SO нет уведомления, которое мне нужно. –

ответ

-1

Вы можете использовать этот мир кода, и вы получите последний артефакт из текущей сборки.

step ([$class: 'CopyArtifact', projectName: 'Pipeline', filter: '**.txt', selector: [$class: 'SpecificBuildSelector', buildNumber: env.BUILD_NUMBER]])