You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps构建失败:ArchiveFiles@2任务报ENOBUFS错误求助

Azure DevOps ArchiveFiles@2任务失败:ENOBUFS错误分析与解决建议

错误详情

执行ArchiveFiles@2任务时触发以下错误:

stderr:  
error: Error: spawnSync /usr/bin/zip ENOBUFS
    at Object.spawnSync (node:internal/child_process:1111:20)
    at Object.spawnSync (node:child_process:814:24)
    at ToolRunner.execSync (/home/vsts/work/_tasks/ArchiveFiles_d8b84976-e99a-4b86-b885-4849694435b0/2.211.0/node_modules/azure-pipelines-task-lib/toolrunner.js:879:23)
    at zipArchive (/home/vsts/work/_tasks/ArchiveFiles_d8b84976-e99a-4b86-b885-4849694435b0/2.211.0/archivefiles.js:152:33)
    at createArchive (/home/vsts/work/_tasks/ArchiveFiles_d8b84976-e99a-4b86-b885-4849694435b0/2.211.0/archivefiles.js:278:13)
    at doWork (/home/vsts/work/_tasks/ArchiveFiles_d8b84976-e99a-4b86-b885-4849694435b0/2.211.0/archivefiles.js:338:9)
    at Object.<anonymous> (/home/vsts/work/_tasks/ArchiveFiles_d8b84976-e99a-4b86-b885-4849694435b0/2.211.0/archivefiles.js:347:1)
    at Module._compile (node:internal/modules/cjs/loader:1105:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
    at Module.load (node:internal/modules/cjs/loader:981:32) {
  errno: -105,
  code: 'ENOBUFS',
  syscall: 'spawnSync /usr/bin/zip',
  path: '/usr/bin/zip',
  spawnargs: [Array]
};
##[error]Error: Archive creation failed for archive file: /home/vsts/work/1/a/release/53059.zip 

当前任务配置:

- task: ArchiveFiles@2
  condition: eq(variables.IS_AFFECTED, 'true')
  inputs:
    rootFolderOrFile: $(Pipeline.Workspace)/dist/${{ folder }}
    includeRootFolder: false
    archiveType: zip
    archiveFile: $(Build.ArtifactStagingDirectory)/release/$(Build.BuildId).zip
    replaceExistingArchive: true

原因分析

ENOBUFS是系统级错误,含义为无可用缓冲区空间。具体到该场景:

  • ArchiveFiles@2任务通过Node.js的spawnSync同步调用/usr/bin/zip命令,这种同步调用的缓冲区大小存在固定限制。
  • 当需要打包的文件数量过多、总体积过大,或zip命令输出的日志信息超出缓冲区上限时,就会触发该错误。

解决建议

1. 精简归档内容

排除不必要的文件,减少zip命令需处理的内容与输出日志量:
修改ArchiveFiles@2任务,添加excludeFiles参数:

- task: ArchiveFiles@2
  condition: eq(variables.IS_AFFECTED, 'true')
  inputs:
    rootFolderOrFile: $(Pipeline.Workspace)/dist/${{ folder }}
    includeRootFolder: false
    archiveType: zip
    archiveFile: $(Build.ArtifactStagingDirectory)/release/$(Build.BuildId).zip
    replaceExistingArchive: true
    excludeFiles: '**/node_modules/**, **/*.log, **/temp/**, **/*.map' # 根据实际场景调整排除规则

2. 替换为直接调用zip命令的脚本任务

绕过ArchiveFiles@2的同步缓冲区限制,用Bash任务直接执行zip命令(异步执行无缓冲区大小限制):

- bash: |
    mkdir -p $(Build.ArtifactStagingDirectory)/release
    zip -r $(Build.ArtifactStagingDirectory)/release/$(Build.BuildId).zip $(Pipeline.Workspace)/dist/${{ folder }} -x "**/node_modules/**" # 按需添加排除规则
  condition: eq(variables.IS_AFFECTED, 'true')

3. 调整代理资源(若适用)

  • 自托管代理:检查代理机器的内存、磁盘空间是否充足,缓冲区不足可能与系统资源紧张相关,可升级机器配置或清理磁盘冗余。
  • 微软托管代理:切换到更高规格的代理实例(如ubuntu-22.04-large),提升系统可用资源。

4. 尝试切换归档格式

将archiveType改为7z,7z的处理逻辑与zip不同,可避开缓冲区限制:

- task: ArchiveFiles@2
  condition: eq(variables.IS_AFFECTED, 'true')
  inputs:
    rootFolderOrFile: $(Pipeline.Workspace)/dist/${{ folder }}
    includeRootFolder: false
    archiveType: 7z
    archiveFile: $(Build.ArtifactStagingDirectory)/release/$(Build.BuildId).7z
    replaceExistingArchive: true

内容的提问来源于stack exchange,提问作者Ultra GC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:55:24