Jenkins中如何不指定全称读取工作区中唯一的动态命名CSV文件
Jenkins Pipeline动态匹配前缀CSV文件实现方案
直接使用Jenkins Pipeline内置的findFiles步骤即可实现通配符匹配,该步骤原生支持沙箱运行,无需额外配置脚本权限,修改后的完整代码如下:
copyArtifacts(projectName: 'scanPinnedVersions') def lastSuccessBuildNum = Jenkins.instance.getItem("scanPinnedVersions").lastSuccessfulBuild.displayName.replace("#","") // 拼接产物存放的目标目录路径 def targetDir = "${WORKSPACE}/${lastSuccessBuildNum}" // 按前缀规则匹配CSV文件 def matchedCsvList = findFiles(glob: "${targetDir}/scanPinnedVersionReport*.csv") // 读取匹配到的唯一文件 def da = readFile matchedCsvList[0].path
可选优化项
- 新增异常校验逻辑,避免匹配不到文件时出现数组越界报错:
if (matchedCsvList.length == 0) { error "目录${targetDir}下未找到符合scanPinnedVersionReport*.csv规则的文件,请检查上游任务产物是否正常生成" }
- 如果你需要使用Java File类实现(仅适用于任务运行在主节点场景),可以替换匹配逻辑为如下写法:
def targetDir = new File("${WORKSPACE}/${lastSuccessBuildNum}") def targetCsv = targetDir.listFiles().find { file -> file.name.startsWith('scanPinnedVersionReport') && file.name.endsWith('.csv') } def da = targetCsv.text
内容的提问来源于stack exchange,提问作者Tom S
相关产品推荐
相关产品推荐

