Dan*_*ral 18 groovy jenkins jenkins-pipeline
我正在尝试在Jenkins管道中列出工作区中的文件,以便我可以使用它来生成适当的并行任务.
虽然我可以简单地使用sh ls > files和阅读它,但我想要的File对象可以用更复杂的逻辑进一步过滤.事实上,Files.listFiles(FileFilter)将是理想的.
但是,我根本无法获取文件列表.首先,我不得不求助于一些奇怪的东西来简单地找出构建的当前工作目录:
sh 'pwd > workspace'
workspace = readFile('workspace').trim()
Run Code Online (Sandbox Code Playgroud)
现在我调用它来检索文件列表:
@NonCPS
def getFiles(String baseDir) {
Arrays.asList(new File(baseDir).listFiles())
}
Run Code Online (Sandbox Code Playgroud)
并获得一个NPE asList,这意味着,通过我读取的javadoc,它new File(baseDir)不存在(或者不是目录).
我正在标记它,@NonCPS因为它对于Pipeline上的groovy闭包是必需的,我更喜欢使用完整的java <1.8语法.
Krz*_*soń 24
对于pwd,您可以使用pwd步骤.
至于主工作区目录中的文件列表,您可以使用findFiles:
files = findFiles(glob: '*.*')
Run Code Online (Sandbox Code Playgroud)
一种适用于所有情况的解决方案,无需使用 JENKINS 函数
def FILES_LIST = sh (script: "ls '${workers_dir}'", returnStdout: true).trim()
//DEBUG
echo "FILES_LIST : ${FILES_LIST}"
//PARSING
for(String ele : FILES_LIST.split("\\r?\\n")){
println ">>>${ele}<<<"
}
Run Code Online (Sandbox Code Playgroud)
这是一个如何在我的项目中找到json文件进行处理的示例.
sh "ls *.json > listJsonFiles"
def files = readFile( "listJsonFiles" ).split( "\\r?\\n" );
sh "rm -f listJsonFiles"
Run Code Online (Sandbox Code Playgroud)
如果您在 master 上运行脚本,您可以尝试以下使用 pwd() 的操作。
sh "ls -la ${pwd()}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45321 次 |
| 最近记录: |