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

如何使用Chef从Web地址下载远程zip压缩包并完成解压

Chef Recipe 下载并解压远程文件最优实现方案

首先不推荐自行调用PowerShell实现,Chef原生内置的资源已经覆盖该场景,自带幂等性、异常处理、完整性校验能力,无需额外编写脚本逻辑。

环境依赖说明

  • Chef Client 15及以上版本:archive_file为原生内置资源,无需额外安装第三方cookbook即可直接使用
  • Chef Client 15以下版本:只需在metadata.rb中添加seven_zip社区cookbook依赖即可使用对应解压能力

推荐实现方案

方案1:单资源完成下载+解压(适合不需要保留原zip包的场景)

仅用archive_file一个资源即可同时完成远程文件下载、本地解压的全流程:

archive_file 'openhardwaremonitor-v0.9.6.zip' do
  source 'https://openhardwaremonitor.org/files/openhardwaremonitor-v0.9.6.zip'
  destination 'C:\Program Files\OpenHardwareMonitor' # 替换为你的实际解压目标路径
  overwrite true # 可选,指定是否覆盖目标路径下的已有文件
  action :extract
end

方案2:分步实现(适合需要保留原zip包、需提前校验文件完整性的场景)

拆分为remote_file下载文件、archive_file解压两个步骤,可灵活添加校验逻辑:

# 第一步:下载zip包到本地指定路径
remote_file 'C:\temp\openhardwaremonitor-v0.9.6.zip' do
  source 'https://openhardwaremonitor.org/files/openhardwaremonitor-v0.9.6.zip'
  # checksum '替换为zip包的SHA256校验值' # 可选,添加后仅当文件校验不匹配时才会重新下载,防止文件被篡改
  action :create
end

# 第二步:解压本地zip包到目标路径
archive_file 'C:\temp\openhardwaremonitor-v0.9.6.zip' do
  destination 'C:\Program Files\OpenHardwareMonitor'
  overwrite true
  action :extract
  only_if { ::File.exist?('C:\temp\openhardwaremonitor-v0.9.6.zip') }
end

原生资源对比自定义PowerShell的优势

  • 天然支持幂等性:重复执行时如果目标文件已存在且符合要求,不会重复执行下载、解压操作,无需自行编写判断逻辑
  • 无需处理命令执行权限、返回值捕获、异常兼容等问题,Chef底层已做好Windows系统适配
  • 支持文件校验、权限配置等扩展能力,代码可读性和可维护性远高于自定义脚本
  • 跨平台兼容性更强,后续如果有跨系统需求仅需调整路径参数即可,无需重写核心逻辑

内容的提问来源于stack exchange,提问作者james chen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:27:02