Azure Pipelines中如何处理作业间中间构建文件且不占用永久存储
Azure Pipeline中间构建工件存储优化方案
方案1:设置中间工件短保留周期
在上传三个构建作业的工件时直接指定最短保留时长,产物到期后会被系统自动清理:
- 在
PublishPipelineArtifact任务中添加retentionDays参数,最小可设置为1天,远短于流水线默认的保留周期,可大幅降低不必要的存储占用 - 配置示例:
- task: PublishPipelineArtifact@1 inputs: targetPath: '$(Build.ArtifactStagingDirectory)/cmake-build' artifact: 'cmake-build-output' retentionDays: 1
如果需要预留问题排查时间,可根据需求调整为2-3天即可。
方案2:使用流水线缓存传递中间产物
不需要保留中间产物用于排查时,可使用流水线缓存替代正式工件完成作业间的产物传递:
- 缓存默认不会展示在工件页面,也不会被计入长期工件存储,到期后自动清理
- 构建作业上传缓存配置示例:
- task: Cache@2 inputs: key: 'cmake-build | "$(Build.BuildId)"' path: '$(Build.ArtifactStagingDirectory)/cmake-build' cacheHitVar: 'CMAKE_CACHE_HIT'
- 打包作业拉取缓存配置示例:
- task: Cache@2 inputs: key: 'cmake-build | "$(Build.BuildId)"' path: '$(Build.ArtifactStagingDirectory)/cmake-build'
你可以给三个构建作业分别配置独立的缓存key,用唯一的构建ID绑定,确保同一个流水线运行的作业能拿到对应版本的产物。
方案3:打包完成后调用接口删除中间工件
如果需要实现中间产物用完即删,可在打包作业最后调用Azure DevOps内置接口删除中间工件,仅保留最终的nsis安装程序工件:
- 先给流水线的构建服务账号授予「删除工件」权限
- 打包作业最后添加脚本任务,调用对应接口删除指定名称的三个中间工件即可。
可选优化
如果三个构建作业和打包作业可调度到同一个代理运行,可直接通过代理本地工作目录传递产物,完全不需要上传工件,既能节省存储也能提升流水线运行效率。
内容的提问来源于stack exchange,提问作者MHebes
相关产品推荐
相关产品推荐

