无法通过Jenkins流水线使用JFrog文件规范下载Artifactory文件求助
Jenkins流水线从JFrog Artifactory下载Tar包时多线程I/O错误
我在Jenkins流水线中使用File Spec从JFrog Artifactory下载tar包,流水线代码如下:
steps { script { def artifactoryServer = getArtifactoryServer 'XYZJFROG' String targetFileLoc = "${WORKSPACE}\\recupTar\\" def buildInfo = artifactoryDownload( spec: """{ "files": [{ "pattern":"XYZ/ABC/TEST/${env.JFROG_ART_FOLDER}/${params.RecuperationTar}/${env.JFROG_ART_FOLDER}-${params.RecuperationTar}.tar", "target": "${targetFileLoc}" }] }""", buildInfo: new BuildInfo(), module: "TEST", failNoOp: true, server: artifactoryServer ) } }
当tar包以多线程方式下载时,每个线程均触发如下I/O错误:
java.io.IOException: Unknown I/O error listing contents of directory: C:\Windows\TEMP\8188781397582827352 at org.apache.commons.io.FileUtils.listFiles(FileUtils.java:2190) at org.apache.commons.io.FileUtils.cleanDirectory(FileUtils.java:333) at org.apache.commons.io.FileUtils.deleteDirectory(FileUtils.java:1192) at org.jfrog.build.extractor.clientConfiguration.util.DependenciesDownloaderHelper.downloadFileConcurrently(DependenciesDownloaderHelper.java:256) at org.jfrog.build.extractor.clientConfiguration.util.DependenciesDownloaderHelper.downloadArtifact(DependenciesDownloaderHelper.java:209) Also: org.jenkinsci.plugins.workflow.actions.ErrorAction$ErrorId: 94f912cc-d89c-43fb-a807-ce10c79240d6 Caused: java.io.IOException
解决建议
- 禁用多线程下载:在
artifactoryDownload调用中添加parallel: false参数,避免多线程对临时目录的竞争问题:def buildInfo = artifactoryDownload( // 其他参数保持不变 parallel: false ) - 检查临时目录权限:确保Jenkins服务运行账号对
C:\Windows\TEMP目录拥有读写、删除子目录的权限,避免线程清理临时文件时触发权限错误。 - 自定义Jenkins临时目录:修改Jenkins启动参数,添加
-Djava.io.tmpdir=D:\JenkinsTemp(替换为你指定的目录),让Jenkins使用独立的临时目录,避开系统TEMP目录的权限限制或资源竞争。 - 修正路径格式:将Windows路径的反斜杠
\替换为正斜杠/,Groovy中无需转义,避免路径解析错误:String targetFileLoc = "${WORKSPACE}/recupTar/" - 升级JFrog插件:检查并升级Jenkins的Artifactory插件至最新版本,旧版本可能存在并发下载时的临时目录处理bug。
内容的提问来源于stack exchange,提问作者Rohit19j91
相关产品推荐
相关产品推荐

