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

Azure Pipelines Cache@2任务tar切换目录失败及缓存0MB问题咨询

目录不存在报错原因与修复

tar: could not chdir to 'D:\a\1\docker'报错是因为Azure Pipelines Cache任务要求配置的path路径必须提前存在,不管缓存命中还是未命中,任务都需要读写该路径,路径不存在就会抛出执行错误。
修复方案是在Cache任务执行前,新增步骤创建对应目录:

  • Windows代理执行PowerShell命令:
New-Item -ItemType Directory -Path $(Pipeline.Workspace)/docker -Force
  • Linux/macOS代理执行Bash命令:
mkdir -p $(Pipeline.Workspace)/docker

缓存大小为0MB问题修复

你需要自行将待缓存的Docker相关文件复制/导出到指定的$(Pipeline.Workspace)/docker路径下,Cache任务仅负责对指定路径的内容做上传、恢复操作,不会自动收集Docker镜像、构建层等缓存内容。
标准Docker缓存实现流程如下:

  1. 前置步骤创建缓存目录
  2. 执行Cache任务,恢复历史缓存内容
  3. 缓存命中时,将缓存目录中的Docker内容加载到运行环境,示例命令:
# 加载缓存的镜像文件
docker load -i $(Pipeline.Workspace)/docker/images.tar
  1. 执行Docker构建,可通过buildx参数直接将构建缓存写入指定目录:
docker buildx build \
  --cache-from=type=local,src=$(Pipeline.Workspace)/docker/buildcache \
  --cache-to=type=local,dest=$(Pipeline.Workspace)/docker/buildcache,mode=max \
  -t 你的镜像标签 .
  1. 若需要缓存固定基础镜像,可在构建完成后将镜像导出到缓存目录:
docker save 基础镜像名:标签 -o $(Pipeline.Workspace)/docker/images.tar
  1. Pipeline运行结束后,Cache任务会自动将缓存目录下的所有新内容打包上传,供后续流水线使用。

优化建议

建议调整Cache任务的key规则,增加Dockerfile、依赖声明文件的哈希值作为key的组成部分,当依赖发生变化时自动生成新缓存,避免复用过期缓存,示例配置:

- task: Cache@2
      inputs:
        key: 'docker | "$(Agent.OS)" | $(Build.SourcesDirectory)/Dockerfile | $(Build.SourcesDirectory)/package.json'
        path: '$(Pipeline.Workspace)/docker'

内容的提问来源于stack exchange,提问作者Dheeraj Palagiri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:42:01