Jenkins管道中的FileNotFoundException

问题描述

我对詹金斯(Jenkins)不熟悉,因此遇到了一些问题。我有Jenkins管道和groovy脚本。我在其中创建文件夹和文件。然后,我检查此文件是否存在(ls -l)-它是否存在。然后,我尝试读取此文件获取FileNotFoundException。我很确定两个文件路径(用于创建和读取)都相同。 我会很感激对此的任何建议。 这是我的常规代码

    sh "mkdir ${WORKSPACE}/ucp"
    sh "mkdir ${WORKSPACE}/ucp/model"

    dir ("${WORKSPACE}/ucp") {
        dir("model") {
            writeFile file: 'ucp-v.0.0.1.metamodel.json',text: """{foo: bar,baz: buzz}
    """
            sh "ls -l"

            model_path = "${WORKSPACE}/ucp/model"
            modelContent = new File("${model_path}" + "/ucp-v.0.0.1.metamodel.json").text
            println modelContent
        }
    }

这是Jenkins管道日志:

Running in Durability level: PERFORMANCE_OPTIMIZED
[Pipeline] Start of Pipeline
[Pipeline] node
Running on jenkins-agent-linux-007 in         /u01/jenkins_slave/workspace/PlatformBuilder/pprbod/PprbodDBAdminJobs/test_pipeline
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Prepare workspace)
[Pipeline] dir
Running in /u01/jenkins_slave/workspace/PlatformBuilder/pprbod/PprbodDBAdminJobs/test_pipeline
[Pipeline] {
[Pipeline] deleteDir
[Pipeline] }
[Pipeline] // dir
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Checkout)
[Pipeline] echo
CHECKOUT
[Pipeline] echo
/u01/jenkins_slave/workspace/PlatformBuilder/pprbod/PprbodDBAdminJobs/test_pipeline
[Pipeline] sh
+ mkdir /u01/jenkins_slave/workspace/PlatformBuilder/pprbod/PprbodDBAdminJobs/test_pipeline/ucp
[Pipeline] sh
+ mkdir /u01/jenkins_slave/workspace/PlatformBuilder/pprbod/PprbodDBAdminJobs/test_pipeline/ucp/model
[Pipeline] sh
+ mkdir /u01/jenkins_slave/workspace/PlatformBuilder/pprbod/PprbodDBAdminJobs/test_pipeline/ucp/whitelist
[Pipeline] dir
Running in /u01/jenkins_slave/workspace/PlatformBuilder/pprbod/PprbodDBAdminJobs/test_pipeline/ucp
[Pipeline] {
[Pipeline] dir
Running in /u01/jenkins_slave/workspace/PlatformBuilder/pprbod/PprbodDBAdminJobs/test_pipeline/ucp/model
[Pipeline] {
[Pipeline] writeFile
[Pipeline] sh
+ ls -l
total 4
-rw-r--r-- 1 jenkins jenkins 30 Aug 26 06:07 ucp-v.0.0.1.metamodel.json
[Pipeline] }
[Pipeline] // dir
[Pipeline] }
[Pipeline] // dir
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
java.io.FileNotFoundException:     /u01/jenkins_slave/workspace/PlatformBuilder/pprbod/PprbodDBAdminJobs/test_pipeline/ucp/model/ucp-v.0.0.1.metamodel.json (No such file or directory)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at groovy.util.CharsetToolkit.<init>(CharsetToolkit.java:71)
    at org.codehaus.groovy.runtime.ResourceGroovyMethods.newReader(ResourceGroovyMethods.java:1572)
    at org.codehaus.groovy.runtime.ResourceGroovyMethods.getText(ResourceGroovyMethods.java:600)
    at org.codehaus.groovy.runtime.dgm$963.doMethodInvoke(UnkNown Source)
    at org.codehaus.groovy.reflection.GeneratedMetaMethod$Proxy.doMethodInvoke(GeneratedMetaMethod.java:73)
    at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:1850)
    at groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:3758)
    at org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:179)
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:456)
    at org.kohsuke.groovy.sandBox.impl.Checker$7.call(Checker.java:355)
    at org.kohsuke.groovy.sandBox.GroovyInterceptor.onGetProperty(GroovyInterceptor.java:68)
    at org.jenkinsci.plugins.scriptsecurity.sandBox.groovy.SandBoxInterceptor.onGetProperty(SandBoxInterceptor.java:313)
    at org.kohsuke.groovy.sandBox.impl.Checker$7.call(Checker.java:353)
    at org.kohsuke.groovy.sandBox.impl.Checker.checkedGetProperty(Checker.java:357)
    at com.cloudbees.groovy.cps.sandBox.SandBoxInvoker.getProperty(SandBoxInvoker.java:29)
    at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)
    at WorkflowScript.run(WorkflowScript:33)
    at ___cps.transform___(Native Method)
    at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.get(PropertyishBlock.java:74)
    at com.cloudbees.groovy.cps.LValueBlock$GetAdapter.receive(LValueBlock.java:30)
    at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.fixName(PropertyishBlock.java:66)
    at sun.reflect.GeneratedMethodAccessor396.invoke(UnkNown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
    at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)
    at com.cloudbees.groovy.cps.Next.step(Next.java:83)
    at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:174)
    at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:163)
    at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:129)
    at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:268)
    at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:163)
    at org.jenkinsci.plugins.workflow.cps.SandBoxContinuable.access$001(SandBoxContinuable.java:18)
    at org.jenkinsci.plugins.workflow.cps.SandBoxContinuable.run0(SandBoxContinuable.java:51)
    at org.jenkinsci.plugins.workflow.cps.cpsThread.runNextChunk(cpsThread.java:185)
    at org.jenkinsci.plugins.workflow.cps.cpsThreadGroup.run(cpsThreadGroup.java:400)
    at org.jenkinsci.plugins.workflow.cps.cpsThreadGroup.access$400(cpsThreadGroup.java:96)
    at org.jenkinsci.plugins.workflow.cps.cpsThreadGroup$2.call(cpsThreadGroup.java:312)
    at org.jenkinsci.plugins.workflow.cps.cpsThreadGroup$2.call(cpsThreadGroup.java:276)
    at org.jenkinsci.plugins.workflow.cps.cpsVmExecutorService$2.call(cpsVmExecutorService.java:67)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:131)
    at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
    at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Finished: FAILURE

解决方法

Jenkins不支持新的File()。通过编写此代码解决了问题:

modelContent = readFile(<path>)