GitHub Actions cache

Предупреждение

Кэш GitHub Actions — это бета-версия функции. Вы можете использовать его уже сегодня, в текущих выпусках Buildx и BuildKit. Однако интерфейс и поведение нестабильны и могут измениться в будущих выпусках.

Кэш действий GitHub использует кэш действий, предоставленный GitHub, доступный в вашей среде выполнения CI. Это рекомендуемый кеш для использования внутри ваших конвейеров действий GitHub, если ваш опция использования находится в пределах ограничения на размер и использование, установленные GitHub.

Примечание

Данный бэкэнд для хранения кэша требует использования драйвера, отличного от драйвера по умолчанию docker — см. дополнительную информацию о выборе драйвера здесь. Чтобы создать новый драйвер (который можно использовать в качестве простой замены):

$ docker buildx create --use --driver=docker-container

Синопсис

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

В следующей таблице рассмотрены доступные параметры CSV, которые можно передать в --cache-to и --cache-from.

Имя

Опция

Тип

По умолчанию

Описание

url

cache-to, cache-from

Строка

$ACTIONS_CACHE_URL

URL кэш-сервера, см. раздел аутентификация.

token

cache-to, cache-from

Строка

$ACTIONS_RUNTIME_TOKEN

Токен доступа, см. раздел аутентификация.

scope

cache-to, cache-from

Строка

Имя текущей ветки Git.

Область применения кэша, см. scope

mode

cache-to

min,max

min

Слои кэша для экспорта, см. режим кэша.

Аутентификация

Если параметры url или token не указаны, серверная часть кэша gha вернется к использованию переменных среды. Если вы вызываете команду docker buildx вручную из встроенного шага, тогда переменные должны быть представлены вручную (например, с помощью crazy-max/ghaction-github-runtime).

Область применения

По умолчанию кэш масштабируется для каждой ветви Git. Это обеспечивает отдельное окружение кэша для основной ветки и каждой ветки с функциями. Если вы собираете несколько образов на одной ветке, каждая сборка будет перезаписывать кэш предыдущей, оставляя только конечный кэш.

Чтобы сохраняет кэш для нескольких сборок в одной ветке, можно вручную указывает имя области действия кэша с помощью параметра scope. В следующем примере для кэша задано сочетание имени ветки и имени образа, чтобы каждый образ получил свой собственный кэш):

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

GitHub ограничения доступа к кэшу, по-прежнему применим. Для рабочего процесса доступен только кеш для текущей ветви, базовой ветви и ветви по умолчанию.

Использование docker/build-push-action

При использовании docker/build-push-action параметры url и token заполняются автоматически. Нет необходимости указывать их вручную или включать какие-либо дополнительные обходные пути.

Например:

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

Дальнейшее чтение

Введение в кэширование см. в разделе Оптимизация сборки с помощью кэша.

Дополнительные сведения о серверной части кэша gha см. в статье BuildKit README.

Для получения дополнительной информации об использовании GitHub Actions с Docker см. раздел Введение в GitHub Actions