内容提要
GitHub发布了Actions的第四个版本,用于上传和下载工件。新版本比以前的版本快10倍,更可靠和灵活。改进包括更好的性能和速度,即时公共API可用性,跨运行下载,报告的大小一致性和不可变性。但第四个版本与以前的版本不兼容,并且有一些限制。
延伸解读
v4 不兼容旧版:迁移时需注意版本配对
v4 与 v3 及更早版本不兼容,上传和下载必须使用相同主版本。例如,若使用 actions/upload-artifact@v4 上传,则必须使用 actions/download-artifact@v4 下载。此外,v4 中同一工作流运行内不能多次上传同名工件,工件一旦上传便不可更改。对于矩阵构建等需要并发上传的场景,需为工件名称添加矩阵属性后缀,再通过 pattern 和 merge-multiple 下载合并。
性能提升显著,但自托管运行器需检查网络
v4 通过移除中间代理服务、将工件内容打包为单个 zip 存档并直接上传至 blob 存储,大幅提升了上传和下载速度,官方测试显示提升超过 10 倍。然而,由于不再有代理,使用自托管运行器的用户必须确保网络配置能够访问新的存储后端端点,否则可能导致操作失败。建议参考自托管文档检查所有端点可达性。
工件立即可用,支持跨运行下载
v4 中工件在上传后立即在 UI 和 API 中可用,无需等待整个工作流运行结束。上传动作还提供了工件 ID 和 URL 输出,便于在审批门禁中检查内容或通过机器人分享链接。下载动作新增 github-token、repository 和 run-id 输入,允许从其他工作流运行或仓库下载工件,但需提供具有 actions:read 权限的令牌。默认情况下仅能下载当前运行及之前尝试的工件。
大小一致性与未来完整性校验
由于采用单一存档上传,v4 中工件报告的大小在上传内容、下载内容和 UI/API 显示之间保持一致。同时,上传过程中可生成校验和,未来将用于完整性检查。这解决了旧版本中因动态生成 zip 和 gzip 压缩导致的大小差异问题。用户可期待后续更多工件元数据的暴露。
Q&A
GitHub Actions 工件上传下载的 v4 版本有哪些主要改进?
v4 版本的主要改进包括:上传和下载速度提升高达 10 倍,性能更可靠灵活;工件立即可在 UI 和 API 中访问;支持跨运行和跨仓库下载;报告的大小一致且不可变;未来将提供校验和。
v4 版本与之前版本是否兼容?使用时需要注意什么?
v4 版本与 v3 及以下版本不兼容。如果使用 actions/upload-artifact@v4 上传,必须使用 actions/download-artifact@v4 下载。此外,不能多次上传同名工件,单个作业最多生成 500 个工件。
为什么 v4 版本的上传下载速度比之前快很多?
v4 通过简化流程、消除中间代理服务、将工件内容打包为单个 zip 文件直接上传到 blob 存储,减少了网络往返和 CPU 开销,从而实现了超过 10 倍的速度提升。
v4 版本如何支持跨运行或跨仓库下载工件?
下载工件 action 新增了 github-token、repository 和 run-id 输入。提供具有 actions:read 权限的 token 后,即可从其他工作流运行或仓库下载工件。默认无 token 时只能下载当前运行及之前尝试的工件。
之前版本的工件上传下载存在哪些常见问题?
之前版本(v1-v3)的问题包括:内部 API 灵活性不足,工件在工作流运行结束前不可用;文件可能被覆盖或损坏;工件大小报告不一致;上传下载速度慢,尤其对于大文件或大量文件。
使用 v4 版本时,自托管运行器需要做什么网络配置?
由于 v4 消除了代理服务,自托管运行器用户必须确保网络配置能够访问新的存储后端端点。具体可参考自托管文档以确保所有端点可达。