Управление кэшем с помощью GitHub Actions

На этой странице приведены примеры использования бэкендов кэш-хранилищ с GitHub Actions.

Примечание

Более подробную информацию о бэкендах для хранения кэша см. в разделе Бэкенды для хранения кэша.

Встроенный кэш

В большинстве случаев вы хотите использовать экспортёр встроенного кэша. Однако обратите внимание, что средство экспорта кэша inline поддерживает только режим кэширования min. Чтобы использовать режим кэша max, отправить образ и кэш отдельно с помощью средства экспорта кэша реестра с параметром cache-to, как показано в файле пример кеша реестра.

name: ci

on:
  push:
    branches:
      - "main"

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v3
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2
      -
        name: Login to Docker Hub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      -
        name: Build and push
        uses: docker/build-push-action@v4
        with:
          context: .
          push: true
          tags: user/app:latest
          cache-from: type=registry,ref=user/app:latest
          cache-to: type=inline

Кэш реестра

Вы можете импортирует/экспортировать кэш из манифеста кэша или (специальной) конфигурации образа в реестре с помощью экспортёр кэша реестра.

name: ci

on:
  push:
    branches:
      - "main"

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v3
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2
      -
        name: Login to Docker Hub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      -
        name: Build and push
        uses: docker/build-push-action@v4
        with:
          context: .
          push: true
          tags: user/app:latest
          cache-from: type=registry,ref=user/app:buildcache
          cache-to: type=registry,ref=user/app:buildcache,mode=max

Кэш GitHub

API бэкенда кэша

Экспериментальный

Данный экспортёр кеша является экспериментальным. Пожалуйста, оставьте отзыв на Репозиторий BuildKit, если у вас возникнут какие-либо проблемы.

Серверная часть Экспортёр кэша GitHub Actions использует GitHub Cache API для извлечения и отправки больших двоичных объектов кэша. Вот почему вы должны использовать данный кэш-сервер только в рабочем процессе GitHub Action, поскольку атрибуты url ($ACTIONS_CACHE_URL) и token ($ACTIONS_RUNTIME_TOKEN) заполняются только в контексте рабочего процесса.

name: ci

on:
  push:
    branches:
      - "main"

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v3
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2
      -
        name: Login to Docker Hub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      -
        name: Build and push
        uses: docker/build-push-action@v4
        with:
          context: .
          push: true
          tags: user/app:latest
          cache-from: type=gha
          cache-to: type=gha,mode=max

Local кэш

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

На данный момент старые записи кеша не удаляются, поэтому размер кеша продолжает расти. В следующем примере в качестве обходного пути используется шаг Move cache (см. moby/buildkit#1896 для получения дополнительной информации).

Вы также можете использовать Кэш GitHub, используя действия/кэш и локальный экспортёр кэша с помощью этого действия:

name: ci

on:
  push:
    branches:
      - "main"

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      -
        name: Checkout
        uses: actions/checkout@v3
      -
        name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2
      -
        name: Cache Docker layers
        uses: actions/cache@v3
        with:
          path: /tmp/.buildx-cache
          key: ${{ runner.os }}-buildx-${{ github.sha }}
          restore-keys: |
            ${{ runner.os }}-buildx-
      -
        name: Login to Docker Hub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      -
        name: Build and push
        uses: docker/build-push-action@v4
        with:
          context: .
          push: true
          tags: user/app:latest
          cache-from: type=local,src=/tmp/.buildx-cache
          cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
      -
        # Temp fix
        # https://github.com/docker/build-push-action/issues/252
        # https://github.com/moby/buildkit/issues/1896
        name: Move cache
        run: |
          rm -rf /tmp/.buildx-cache
          mv /tmp/.buildx-cache-new /tmp/.buildx-cache