Configuring your GitHub Actions builder
Cette page contient des instructions sur la configuration de vos instances BuildKit lors de l'utilisation de notre Setup Buildx Action.
Épinglage de version
Par défaut, l'action tentera d'utiliser la dernière version de Buildx disponible sur le Runner GitHub (le client de construction) et la dernière version de BuildKit (le serveur de construction).
Pour épingler à une version spécifique de Buildx, utilisez l'entrée version
.
Par exemple, pour épingler à Buildx v0.10.0 :
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
version: v0.10.0
Pour épingler à une version spécifique de BuildKit, utilisez l'option image
dans l'entrée driver-opts
. Par exemple, pour épingler à BuildKit v0.11.0 :
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver-opts: image=moby/buildkit:v0.11.0
Journaux de conteneur BuildKit
Pour afficher les journaux de conteneur BuildKit lors de l'utilisation du
pilote docker-container
, vous devez soit
activer la journalisation de débogage d'étape,
ou définir le drapeau buildkitd --debug
dans l'action
Docker Setup Buildx :
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
buildkitd-flags: --debug
- name: Build
uses: docker/build-push-action@v6
Les journaux seront disponibles à la fin d'une tâche :


Configuration du démon BuildKit
Vous pouvez fournir une configuration BuildKit
à votre constructeur si vous utilisez le
pilote docker-container
(par défaut) avec les entrées config
ou buildkitd-config-inline
:
Miroir de registre
Vous pouvez configurer un miroir de registre en utilisant un bloc inline
directement dans votre workflow avec l'entrée buildkitd-config-inline
:
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
buildkitd-config-inline: |
[registry."docker.io"]
mirrors = ["mirror.gcr.io"]
Pour plus d'informations sur l'utilisation d'un miroir de registre, voir Miroir de registre.
Parallélisme maximum
Vous pouvez limiter le parallélisme du solveur BuildKit ce qui est particulièrement utile pour les machines peu puissantes.
Vous pouvez utiliser l'entrée buildkitd-config-inline
comme l'exemple
précédent, ou vous pouvez utiliser un fichier de configuration BuildKit dédié
de votre dépôt si vous le souhaitez avec l'entrée config
:
# .github/buildkitd.toml
[worker.oci]
max-parallelism = 4
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
config: .github/buildkitd.toml
Ajouter des nœuds supplémentaires au constructeur
Buildx supporte l'exécution de constructions sur plusieurs machines. Ceci est utile pour construire des images multi-plateformes sur des nœuds natifs pour des cas plus compliqués qui ne sont pas gérés par QEMU. Construire sur des nœuds natifs a généralement de meilleures performances, et vous permet de distribuer la construction sur plusieurs machines.
Vous pouvez ajouter des nœuds au constructeur que vous créez en utilisant
l'option append
. Elle prend une entrée sous forme de document chaîne YAML
pour supprimer les limitations intrinsèquement liées à GitHub Actions : vous
ne pouvez utiliser que des chaînes dans les champs d'entrée :
Nom | Type | Description |
---|---|---|
name |
String | Nom du nœud. Si vide, c'est le nom du constructeur auquel il appartient, avec un suffixe de numéro d'index. Ceci est utile pour le définir si vous voulez modifier/supprimer un nœud dans une étape sous-jacente de votre workflow. |
endpoint |
String | Contexte Docker ou endpoint du nœud à ajouter au constructeur |
driver-opts |
List | Liste d' options spécifiques au pilote supplémentaires |
buildkitd-flags |
String | Drapeaux pour le démon buildkitd |
platforms |
String | Plateformes fixes pour le nœud. Si non vide, les valeurs prennent priorité sur celles détectées. |
Voici un exemple utilisant des nœuds distants avec le
pilote remote
et l'authentification TLS :
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: remote
endpoint: tcp://oneprovider:1234
append: |
- endpoint: tcp://graviton2:1234
platforms: linux/arm64
- endpoint: tcp://linuxone:1234
platforms: linux/s390x
env:
BUILDER_NODE_0_AUTH_TLS_CACERT: ${{ secrets.ONEPROVIDER_CA }}
BUILDER_NODE_0_AUTH_TLS_CERT: ${{ secrets.ONEPROVIDER_CERT }}
BUILDER_NODE_0_AUTH_TLS_KEY: ${{ secrets.ONEPROVIDER_KEY }}
BUILDER_NODE_1_AUTH_TLS_CACERT: ${{ secrets.GRAVITON2_CA }}
BUILDER_NODE_1_AUTH_TLS_CERT: ${{ secrets.GRAVITON2_CERT }}
BUILDER_NODE_1_AUTH_TLS_KEY: ${{ secrets.GRAVITON2_KEY }}
BUILDER_NODE_2_AUTH_TLS_CACERT: ${{ secrets.LINUXONE_CA }}
BUILDER_NODE_2_AUTH_TLS_CERT: ${{ secrets.LINUXONE_CERT }}
BUILDER_NODE_2_AUTH_TLS_KEY: ${{ secrets.LINUXONE_KEY }}
Authentification pour les constructeurs distants
Les exemples suivants montrent comment gérer l'authentification pour les constructeurs distants, en utilisant SSH ou TLS.
Authentification SSH
Pour pouvoir se connecter à un endpoint SSH en utilisant le
pilote docker-container
,
vous devez configurer la clé privée SSH et la configuration sur le Runner GitHub :
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
- name: Set up SSH
uses: MrSquaare/ssh-setup-action@2d028b70b5e397cf8314c6eaea229a6c3e34977a # v3.1.0
with:
host: graviton2
private-key: ${{ secrets.SSH_PRIVATE_KEY }}
private-key-name: aws_graviton2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
endpoint: ssh://me@graviton2
Authentification TLS
Vous pouvez également
configurer une instance BuildKit distante
en utilisant le pilote distant. Pour faciliter l'intégration dans votre
workflow, vous pouvez utiliser des variables d'environnement qui configurent
l'authentification en utilisant les certificats client BuildKit pour le tcp://
:
BUILDER_NODE_<idx>_AUTH_TLS_CACERT
BUILDER_NODE_<idx>_AUTH_TLS_CERT
BUILDER_NODE_<idx>_AUTH_TLS_KEY
Le placeholder <idx>
est la position du nœud dans la liste des nœuds.
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: remote
endpoint: tcp://graviton2:1234
env:
BUILDER_NODE_0_AUTH_TLS_CACERT: ${{ secrets.GRAVITON2_CA }}
BUILDER_NODE_0_AUTH_TLS_CERT: ${{ secrets.GRAVITON2_CERT }}
BUILDER_NODE_0_AUTH_TLS_KEY: ${{ secrets.GRAVITON2_KEY }}
Mode autonome
Si vous n'avez pas le CLI Docker installé sur le Runner GitHub, le binaire
Buildx est invoqué directement, au lieu de l'appeler comme un plugin Docker CLI.
Ceci peut être utile si vous voulez utiliser le pilote kubernetes
dans votre
runner auto-hébergé :
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: kubernetes
- name: Build
run: |
buildx build .
Constructeurs isolés
L'exemple suivant montre comment vous pouvez sélectionner différents constructeurs pour différentes tâches.
Un exemple de scénario où ceci pourrait être utile est quand vous utilisez un monorepo, et vous voulez diriger différents packages vers des constructeurs spécifiques. Par exemple, certains packages peuvent être particulièrement gourmands en ressources à construire et nécessiter plus de calcul. Ou ils nécessitent un constructeur équipé d'une capacité ou d'un matériel particulier.
Pour plus d'informations sur le constructeur distant, voir
pilote remote
et
l'exemple d'ajout de nœuds de constructeur.
name: ci
on:
push:
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Set up builder1
uses: docker/setup-buildx-action@v3
id: builder1
- name: Set up builder2
uses: docker/setup-buildx-action@v3
id: builder2
- name: Build against builder1
uses: docker/build-push-action@v6
with:
builder: ${{ steps.builder1.outputs.name }}
target: mytarget1
- name: Build against builder2
uses: docker/build-push-action@v6
with:
builder: ${{ steps.builder2.outputs.name }}
target: mytarget2