Selenium4.8.1升级后Jenkins Pipeline执行后置条件抛TAR归档截断错误
问题:Selenium升级至4.8.1后Jenkins Pipeline归档工件失败
将Selenium从3.141.59版本升级到4.8.1版本后,原本运行正常的Jenkins Pipeline在执行always后置条件时抛出错误:java.io.IOException: Truncated TAR archive。日志显示文件复制步骤正常,但归档工件环节出现问题,最终流水线执行失败。
错误堆栈信息
at java.base/java.io.InputStream.read(InputStream.java:205) at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1309) at org.apache.commons.io.IOUtils.copy(IOUtils.java:978) at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1282) at org.apache.commons.io.IOUtils.copy(IOUtils.java:953) at hudson.util.IOUtils.copy(IOUtils.java:53) at hudson.FilePath.readFromTar(FilePath.java:2982) Also: Also: hudson.remoting.Channel$CallSiteStackTrace: Remote call to JNLP4-connect connection from ip-10-26-93-19.ec2.internal/10.26.93.19:36520 at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1784) at hudson.remoting.UserRequest$ExceptionResponse.retrieve(UserRequest.java:356) at hudson.remoting.Channel$2.adapt(Channel.java:1034) at hudson.remoting.Channel$2.adapt(Channel.java:1030) at hudson.remoting.FutureAdapter.get(FutureAdapter.java:66) at hudson.FilePath.copyRecursiveTo(FilePath.java:2753) at jenkins.model.StandardArtifactManager.archive(StandardArtifactManager.java:73) at hudson.tasks.ArtifactArchiver.perform(ArtifactArchiver.java:256) at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:101) at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:71) at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829) java.io.IOException: This archive contains unclosed entries. at org.apache.commons.compress.archivers.tar.TarArchiveOutputStream.finish(TarArchiveOutputStream.java:291) at org.apache.commons.compress.archivers.tar.TarArchiveOutputStream.close(TarArchiveOutputStream.java:309) at hudson.util.io.TarArchiver.close(TarArchiver.java:125) at hudson.FilePath.writeToTar(FilePath.java:2953) at hudson.FilePath.access$3500(FilePath.java:212) at hudson.FilePath$CopyRecursiveRemoteToLocal.invoke(FilePath.java:2916) at hudson.FilePath$CopyRecursiveRemoteToLocal.invoke(FilePath.java:2901) at hudson.FilePath$FileCallableWrapper.call(FilePath.java:3487) at hudson.remoting.UserRequest.perform(UserRequest.java:211) at hudson.remoting.UserRequest.perform(UserRequest.java:54) at hudson.remoting.Request$2.run(Request.java:376) at hudson.remoting.InterceptingExecutorService.lambda$wrap$0(InterceptingExecutorService.java:78) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:121) at java.base/java.lang.Thread.run(Thread.java:829) Caused: java.util.concurrent.ExecutionException at hudson.remoting.Channel$2.adapt(Channel.java:1036) at hudson.remoting.Channel$2.adapt(Channel.java:1030) at hudson.remoting.FutureAdapter.get(FutureAdapter.java:66) at hudson.FilePath.copyRecursiveTo(FilePath.java:2753) Caused: java.io.IOException: Failed to extract /home/jenkins/agent/workspace/myworkspace/abc_server_automation_run/transfer of 54 files at hudson.FilePath.readFromTar(FilePath.java:2992) at hudson.FilePath.copyRecursiveTo(FilePath.java:2750) at jenkins.model.StandardArtifactManager.archive(StandardArtifactManager.java:73) at hudson.tasks.ArtifactArchiver.perform(ArtifactArchiver.java:256) at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:101) at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:71) at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829)
Pipeline执行日志
[Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // withEnv [Pipeline] } [Pipeline] // node [Pipeline] } [Pipeline] // podTemplate [Pipeline] End of Pipeline ERROR: Exit code is non zero, few tests failed so erroring out! Finished: FAILURE + ls -l /tmp/shared/output/ total 4 drwxr-xr-x 6 root root 4096 Feb 24 11:54 smoke-results [Pipeline] sh + cp -r /tmp/shared/output/ . [Pipeline] sh + ls -alh ./output total 4.0K drwxr-xr-x 3 root root 27 Feb 24 11:54 . drwxr-xr-x 7 1000 1000 283 Feb 24 11:54 .. drwxr-xr-x 6 root root 4.0K Feb 24 11:54 smoke-results [Pipeline] archiveArtifacts Archiving artifacts [Pipeline] sh + docker-compose down
解决方法
1. 修正归档文件权限
从日志可见,复制后的./output目录及子文件属于root用户,而Jenkins Agent运行在1000:1000用户下,权限不足会导致归档时无法完整读取文件,破坏TAR结构。在复制文件后添加权限修正步骤:
chown -R 1000:1000 ./output
2. 释放Selenium文件占用
Selenium 4.x可能在测试结束后未完全释放结果文件句柄,导致Jenkins归档时读取失败。可在归档前增加等待时间,确保句柄释放:
sleep 10
同时确保测试代码中显式关闭Selenium驱动及相关资源。
3. 调整Jenkins归档配置
- 禁用归档指纹功能,减少额外操作:
archiveArtifacts artifacts: 'output/**', fingerprint: false
- 手动打包后再归档,避免Jenkins自动打包出错:
tar -czf output.tar.gz ./output
随后归档output.tar.gz文件。
4. 检查Agent磁盘空间
磁盘空间不足也可能导致TAR文件截断,执行以下命令确认空间充足:
df -h
内容的提问来源于stack exchange,提问作者amit kumar
相关产品推荐
相关产品推荐

