⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Cache GitHub Actions

Availability: Experimental

Le cache GitHub Actions utilise le cache fourni par GitHub Actions ou d'autres services de cache prenant en charge le protocole de cache GitHub Actions. C'est le cache recommandé à utiliser dans vos workflows GitHub Actions, tant que votre cas d'utilisation respecte les limites de taille et d'utilisation définies par GitHub.

Ce backend de stockage de cache n'est pas pris en charge avec le pilote docker par défaut. Pour utiliser cette fonctionnalité, créez un nouveau constructeur en utilisant un pilote différent. Voir Pilotes de construction pour plus d'informations.

Synopsis

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

Le tableau suivant décrit les paramètres CSV disponibles que vous pouvez passer à --cache-to et --cache-from.

Nom Option Type Par défaut Description
url cache-to,cache-from Chaîne $ACTIONS_CACHE_URL ou $ACTIONS_RESULTS_URL URL du serveur de cache, voir authentification.
url_v2 cache-to,cache-from Chaîne $ACTIONS_RESULTS_URL URL du serveur de cache v2, voir authentification.
token cache-to,cache-from Chaîne $ACTIONS_RUNTIME_TOKEN Jeton d'accès, voir authentification.
scope cache-to,cache-from Chaîne buildkit À quelle portée appartient l'objet de cache, voir portée
mode cache-to min,max min Couches de cache à exporter, voir mode de cache.
ignore-error cache-to Booléen false Ignorer les erreurs causées par les exportations de cache échouées.
timeout cache-to,cache-from Chaîne 10m Durée maximale pour l'importation ou l'exportation du cache avant expiration.
repository cache-to Chaîne Dépôt GitHub utilisé pour le stockage du cache.
ghtoken cache-to Chaîne Jeton GitHub requis pour accéder à l'API GitHub.

Authentification

Si les paramètres url, url_v2 ou token ne sont pas spécifiés, le backend de cache gha utilisera les variables d'environnement par défaut. Si vous invoquez la commande docker buildx manuellement à partir d'une étape en ligne, alors les variables doivent être exposées manuellement. Envisagez d'utiliser l'action GitHub crazy-max/ghaction-github-runtime, comme aide pour exposer les variables.

Portée

La portée est une clé utilisée pour identifier l'objet de cache. Par défaut, elle est définie à buildkit. Si vous construisez plusieurs images, chaque construction écrasera le cache de la précédente, ne laissant que le cache final.

Pour préserver le cache pour plusieurs constructions, vous pouvez spécifier cet attribut de portée avec un nom spécifique. Dans l'exemple suivant, le cache est défini sur le nom de l'image, pour s'assurer que chaque image obtient son propre cache :

$ 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 .

Les restrictions d'accès au cache de GitHub s'appliquent toujours. Seul le cache de la branche actuelle, de la branche de base et de la branche par défaut est accessible par un workflow.

Utilisation de docker/build-push-action

Lorsque vous utilisez docker/build-push-action, les paramètres url et token sont automatiquement renseignés. Pas besoin de les spécifier manuellement, ou d'inclure des solutions de contournement supplémentaires.

Par exemple :

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

Éviter la limitation de l'API de cache GitHub Actions

Les limites d'utilisation et la politique d'expulsion de GitHub font que les entrées de cache obsolètes sont supprimées après un certain temps. Par défaut, le backend de cache gha utilise l'API de cache GitHub Actions pour vérifier l'état des entrées de cache.

L'API de cache GitHub Actions est soumise à une limitation de débit si vous faites trop de requêtes en peu de temps, ce qui peut se produire à la suite de recherches de cache pendant une construction utilisant le backend de cache gha.

#31 exporting to GitHub Actions Cache
#31 preparing build cache for export
#31 preparing build cache for export 600.3s done
#31 ERROR: maximum timeout reached
------
 > exporting to GitHub Actions Cache:
------
ERROR: failed to solve: maximum timeout reached
make: *** [Makefile:35: release] Error 1
Error: Process completed with exit code 2.

Pour atténuer ce problème, vous pouvez fournir un jeton GitHub à BuildKit. Cela permet à BuildKit d'utiliser l'API GitHub standard pour vérifier les clés de cache, réduisant ainsi le nombre de requêtes faites à l'API de cache.

Pour fournir un jeton GitHub, vous pouvez utiliser le paramètre ghtoken, et un paramètre repository pour spécifier le dépôt à utiliser pour le stockage du cache. Le paramètre ghtoken est un jeton GitHub avec la portée repo, qui est nécessaire pour accéder à l'API de cache GitHub Actions.

Le paramètre ghtoken est automatiquement défini à la valeur de secrets.GITHUB_TOKEN lorsque vous construisez avec l'action docker/build-push-action. Vous pouvez également définir le paramètre ghtoken manuellement en utilisant l'entrée github-token, comme montré dans l'exemple suivant :

- name: Build and push
  uses: docker/build-push-action@v6
  with:
    context: .
    push: true
    tags: "<registry>/<image>:latest"
    cache-from: type=gha
    cache-to: type=gha,mode=max
    github-token: ${{ secrets.MY_CUSTOM_TOKEN }}

Pour aller plus loin

Pour une introduction à la mise en cache, voir Cache de construction Docker.

Pour plus d'informations sur le backend de cache gha, voir le README de BuildKit.

Pour plus d'informations sur l'utilisation de GitHub Actions avec Docker, voir Introduction à GitHub Actions