GitHub Actions 缓存

实验性的

这是一个实验性功能。界面和行为不稳定,在未来的版本中可能会发生变化。

GitHub Actions 缓存利用 GitHub 提供的 Action 缓存或支持 GitHub Actions 缓存协议的其他缓存服务。只要您的用例符合 GitHub 设置的大小和使用限制,这就是建议在 GitHub Actions 工作流程中使用的缓存。

默认驱动程序不支持此缓存存储后端docker。要使用此功能,请使用不同的驱动程序创建一个新的构建器。有关详细信息,请参阅 构建驱动程序。

概要

$ docker buildx build --push -t <registry>/<image> \
  --cache-to type=gha[,parameters...] \
  --cache-from type=gha[,parameters...] .

下表描述了您可以传递到 --cache-to和 的可用 CSV 参数--cache-from

姓名选项类型默认描述
urlcache-to,cache-from细绳$ACTIONS_CACHE_URL缓存服务器 URL,请参阅 身份验证
tokencache-to,cache-from细绳$ACTIONS_RUNTIME_TOKEN访问令牌,请参阅 身份验证
scopecache-to,cache-from细绳buildkit缓存对象属于哪个作用域,参见 作用域
modecache-tomin,maxmin缓存要导出的图层,请参阅 缓存模式
ignore-errorcache-to布尔值false忽略因缓存导出失败而导致的错误。
timeoutcache-to,cache-from细绳10m超时之前导入或导出缓存的最大持续时间。

验证

如果未指定url或参数,缓存后端将回退到使用环境变量。如果您 从内联步骤手动调用该命令,则必须手动公开变量。考虑使用 GitHub Action 作为公开变量的助手。tokenghadocker buildxcrazy-max/ghaction-github-runtime

范围

范围是用来标识缓存对象的关键。默认情况下,它设置为 buildkit。如果构建多个镜像,每次构建都会覆盖前一个的缓存,只留下最终的缓存。

要为多个构建保留缓存,您可以使用特定名称指定此范围属性。在以下示例中,缓存设置为图像名称,以确保每个图像都有自己的缓存:

$ docker buildx build --push -t <registry>/<image> \
  --cache-to type=gha,url=...,token=...,scope=image \
  --cache-from type=gha,url=...,token=...,scope=image .
$ docker buildx build --push -t <registry>/<image2> \
  --cache-to type=gha,url=...,token=...,scope=image2 \
  --cache-from type=gha,url=...,token=...,scope=image2 .

GitHub 的 缓存访问限制仍然适用。工作流只能访问当前分支、基本分支和默认分支的缓存。

使用 docker/build-push-action

使用 时 docker/build-push-actionurltoken参数会自动填充。无需手动指定它们,或包含任何其他解决方法。

例如:

- name: Build and push
  uses: docker/build-push-action@v5
  with:
    context: .
    push: true
    tags: "<registry>/<image>:latest"
    cache-from: type=gha
    cache-to: type=gha,mode=max

进一步阅读

有关缓存的介绍,请参阅 Docker 构建缓存

有关gha缓存后端的更多信息,请参阅 BuildKit README

有关将 GitHub Actions 与 Docker 结合使用的更多信息,请参阅 GitHub Actions 简介