即使某个步骤失败(例如测试),如何使 Azure DevOps 的管道缓存存储其结果?

Mac*_*cke 5 azure-devops pipeline-cache

背景: 管道缓存允许存储文件夹并在下一个构建中重复使用它,前提是某些键、分支等匹配。对于 node_modules、nuget 包和 Git LFS 很有用,也适用于构建

我在管道缓存文档中找不到任何相关内容。

即使构建失败,我也想保存缓存,用于增量构建或 Git LFS 签出,例如以下场景:

  • 新功能分支签入
  • 一次大的重构,因此有很多变化
  • 一些测试失败,因此未存储缓存
  • 修复它们是微不足道的,并且需要小的重新编译,但是整个构建需要重新运行整个管道失败。

该示例列出了如下内容:

- task: Cache@2
  inputs:
    key: 'yarn | "$(Agent.OS)" | yarn.lock'
    restoreKeys: |
       yarn | "$(Agent.OS)"
       yarn
    path: $(YARN_CACHE_FOLDER)
  displayName: Cache Yarn packages
Run Code Online (Sandbox Code Playgroud)

但只有当整个管道成功时它才会缓存。

Leo*_*SFT 6

即使某个步骤失败(例如测试),如何存储 Azure DevOps 管道缓存?

经过一段时间的调查和讨论,即使某个步骤失败,恐怕也没有这样的任务/功能来存储 Azure DevOps 管道缓存。

根据文档Pipeline caching,此任务用于通过允许在以后的运行中重用一次运行的输出或下载的依赖项来帮助减少构建时间,从而减少或避免再次重新创建或重新下载相同文件的成本。

它不解析文件或构建日志。因此,即使我们缓存了失败管道生成的文件,我们也无法在下次使用未正确生成或未生成的文件。在失败的构建中提取正确的信息似乎非常困难。

希望这可以帮助。

  • 好吧,当您定义管道缓存的文件夹时,我主要将其用作任务缓存,具有不同的键和目录。也许我会提交一个关于缓存任务的 PR,只是为了使成功检查成为可选的..:) (3认同)
  • 嗨,利奥。感谢您花时间研究它。如果对失败的构建做什么的决定由我而不是系统决定,我当然会很感激。如果构建成功,但测试失败,我可以缓存构建吗?如果 nuget 包下载成功,但构建失败,我仍然可以缓存包等。我会将其标记为已接受的答案,并希望(但不期望)将来可能会对此进行修复。:) (2认同)
  • @Macke,是的,我同意你的观点。看来我们需要像“任务缓存”而不是“管道缓存”之类的东西,这样我们就可以缓存任务的输出。我认为这是一个好主意,但可能需要很长时间才能实现。 (2认同)