首页 > 解决方案 > 在 Azure Devops 中缓存 Chocolatey 包

问题描述

TLDR;

我有一个 Azure Devops Pipeline,它使用巧克力来安装依赖项。我想缓存下载的巧克力包,类似于如何缓存节点依赖项(见下文)或使用缓存代理服务器。

  1. 是否可以缓存从 Chocolatey 下载的包以便在下次运行时可用?

  2. 如果目前不容易做到这一点,那么是否可以为巧克力包运行类似于AptCacherNg的缓存代理服务器?

当前设置

我目前在 Azure Devops 中有一个管道设置,需要来自巧克力社区的包。该步骤相当于:

choco install nasm --confirm --no-progress

在此处输入图像描述

我正在使用以下内容缓存节点依赖项:

steps:
- task: Cache@2
  displayName: 'Cache npm packages'
  inputs:
    key: '**/package-lock.json, !**/node_modules/**/package-lock.json, !**/.*/**/package-lock.json'
    path: '$(System.DefaultWorkingDirectory)/node_modules'

我已经考虑过是否可以为此修改密钥以检查 choco 包或使用使用此插件的重复步骤,但我不知道具体如何执行此操作。

背景

最近,其中一个模块网站离线了几个小时。虽然它处于离线状态,但我注意到在日志中它指出许可用户在缓存包时可能没有问题。我查看了许可证定价,似乎对于最多 8 台机器的单用户许可证,每年的成本是合理的 96 美元,但在许可证中它指出使用它会违反商业使用条款。营业执照为 16 美元/年/机器,至少 100 台机器。对于这样一个只需要安装几个软件包的小型开发团队来说,1600 美元/年比我现在想支付的要多一点。他们建议使用社区版。

标签: azure-devopscontinuous-integrationchocolatey

解决方案


Choco 有一个方便的--cache选项,可让您指定缓存位置。将此选项与专用Cache步骤一起使用:

- task: Cache@2
  displayName: 'Cache choco'
  inputs:
    key: 'path_to_a_file_or_just_a_string_that_you_update_manually'
    path: '$(System.DefaultWorkingDirectory)/choco_cache'
- script: choco install nasm --confirm --no-progress --cache $(System.DefaultWorkingDirectory)/choco_cache
  displayName: 'install choco packages'

推荐阅读