无法读取詹金斯目录中存在的文件

时间:2020-08-21 11:52:09

标签: java jenkins groovy jenkins-pipeline java-io

我正在尝试在詹金斯管道中读取文件。我使用Linux'tee'命令创建此文件。 我尝试使用内置的Java函数(例如java.nio中的Files.readAllLines或java.io包中的BufferedReader)读取文件。 两种情况均不起作用。

我想使用这两种或类似技术的原因是因为我必须在共享库中读取此文件,而不是在Jenkins文件中。 我尝试在Jenkins管道中读取文件,以测试这两种方法是否有效。

如何使用这些技术来读取工作区中已经存在的文件?

此外,我尝试使用jenkins readFile方法,该方法有效,但我认为不能在共享库中使用它。

我的Jenkins文件是:

import java.io.file.*

pipeline {
agent any

stages {
    stage('Scan Timeout Test') {
        steps {
            script {
                sh '''echo "Running ls before ..."
ls -lt
                '''
                sh 'ls -lt | tee lslog.txt'
                sh '''pwd
                ls -lt
                '''
                getLogs("$WORKSPACE/lslog.txt")
            }
        }
    } //end of stage
  }
}

def getLogs(logPath) throws IOException {
    //println "Reading $logPath..."
    //def text = readFile logPath
    //println text
     /*println "[INFO] Reading Log File: " + Paths.get(logPath).toAbsolutePath().toString()
     try {
       return Files.readAllLines(Paths.get(logPath), StandardCharsets.UTF_8);
     } catch(IOException e){
         println "[ERROR] Failed to read file '"+logPath+"': "+e.getMessage()
         throw e
     }*/
     BufferedReader bufReader = new BufferedReader(new FileReader(logPath)); 
     ArrayList<String> listOfLines = new ArrayList<>(); 
 
     String line = bufReader.readLine(); 
 
     while (line != null) { 
         listOfLines.add(line); 
         line = bufReader.readLine(); 
     }
 
     bufReader.close();
     return listOfLines
}


The output that I get in my Jenkins console is: 
+ pwd
/jenkins/workspace/test
+ ls -lt
total 44
-rw-r--r-- 1 root root   526 Aug 21 11:32 lslog.txt
drwxr-xr-x 2 root root   173 Aug 21 11:32 vars
drwxr-xr-x 3 root root   109 Aug 21 11:32 resources
drwxr-xr-x 4 root root    29 Aug 21 11:32 src
-rw-r--r-- 1 root root 22783 Aug 21 11:32 README.md
-rw-r--r-- 1 root root   602 Aug 21 11:32 build.gradle
drwxr-xr-x 3 root root    21 Aug 21 11:32 gradle
-rw-r--r-- 1 root root  5296 Aug 21 11:32 gradlew
-rw-r--r-- 1 root root  2176 Aug 21 11:32 gradlew.bat
drwxr-xr-x 2 root root   118 Aug 21 11:32 integration-tests
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
java.io.FileNotFoundException: /jenkins/workspace/test/lslog.txt (No such file or directory)
at java.io.FileInputStream.open0(Native Method)

使用ls -lt,我可以看到我的文件lslog.txt是在目录中创建的,但是我无法读取它。

1 个答案:

答案 0 :(得分:3)

只要您遵循这些步骤,就可以在共享库中使用readFile。 查看https://www.jenkins.io/doc/book/pipeline/shared-libraries/#accessing-steps

上的文档
docker system df