GitHub Actions是否有与Azure DevOps「Publish Pipeline Artifact」对等的功能?
GitHub Actions替代Azure DevOps「Publish Pipeline Artifact」的解决方案
GitHub Actions原生没有和Azure DevOps「Publish Pipeline Artifact」完全对等的内置功能,你遇到的传输耗时过高问题,确实来源于actions/upload-artifact@v2的逐文件上传机制,该机制对包含大量小文件的全量Pipeline产物场景极不友好。你可以通过手动预打包+上传的方式,将耗时压缩到和Azure DevOps接近的水平,具体实现方案如下:
具体操作步骤
- 第一步:在workflow的上传产物步骤前,新增打包步骤,将所有需要作为Pipeline产物的内容打包为单个压缩包:
- Linux/macOS运行环境使用命令:
tar -czf pipeline-full-artifact.tar.gz ./要打包的工作目录路径/ - Windows运行环境使用命令:
Compress-Archive -Path ./要打包的工作目录路径/* -DestinationPath pipeline-full-artifact.zip
- Linux/macOS运行环境使用命令:
- 第二步:升级
actions/upload-artifact到最新的v4版本(相比v2版本传输性能提升2倍以上),仅上传打包好的单个压缩包即可,参考配置:- name: 上传全量Pipeline产物 uses: actions/upload-artifact@v4 with: name: pipeline-full-artifact path: pipeline-full-artifact.tar.gz # Windows环境替换为zip包路径 retention-days: 7 # 可自定义产物保留天数,与原有Azure DevOps规则对齐 - 第三步:后续job或其他流程需要使用该产物时,下载完成后先执行解压操作即可:
- Linux/macOS解压命令:
tar -xzf pipeline-full-artifact.tar.gz - Windows解压命令:
Expand-Archive -Path pipeline-full-artifact.zip -DestinationPath ./目标工作目录/
- Linux/macOS解压命令:
额外优化建议
- 若单包产物容量超过10GB,建议按目录拆分为多个压缩包分别上传,降低单文件传输失败重试的成本
- 如需跨workflow共享产物,可将打包后的压缩包上传到GitHub Packages,传输性能优于官方upload-artifact动作
内容的提问来源于stack exchange,提问作者aseb
相关产品推荐
相关产品推荐

