Cibles de matrice
Une stratégie de matrice vous permet de diviser une seule cible en plusieurs variantes différentes, en fonction des paramètres que vous spécifiez. Cela fonctionne de manière similaire aux stratégies de matrice pour les actions GitHub. Vous pouvez l'utiliser pour réduire la duplication dans votre définition Bake.
L'attribut de matrice est une carte de noms de paramètres à des listes de valeurs. Bake construit chaque combinaison possible de valeurs comme une cible distincte.
Chaque cible générée doit avoir un nom unique. Pour spécifier comment les noms de cibles doivent être résolus, utilisez l'attribut de nom.
L'exemple suivant résout la cible de l'application en app-foo
et app-bar
. Il
utilise également la valeur de la matrice pour définir l'
étape de construction de la cible.
target "app" {
name = "app-${tgt}"
matrix = {
tgt = ["foo", "bar"]
}
target = tgt
}
$ docker buildx bake --print app
[+] Building 0.0s (0/0)
{
"group": {
"app": {
"targets": [
"app-foo",
"app-bar"
]
},
"default": {
"targets": [
"app"
]
}
},
"target": {
"app-bar": {
"context": ".",
"dockerfile": "Dockerfile",
"target": "bar"
},
"app-foo": {
"context": ".",
"dockerfile": "Dockerfile",
"target": "foo"
}
}
}
Axes multiples
Vous pouvez spécifier plusieurs clés dans votre matrice pour diviser une cible sur plusieurs axes. Lorsque vous utilisez plusieurs clés de matrice, Bake construit chaque variante possible.
L'exemple suivant construit quatre cibles :
app-foo-1-0
app-foo-2-0
app-bar-1-0
app-bar-2-0
target "app" {
name = "app-${tgt}-${replace(version, ".", "-")}"
matrix = {
tgt = ["foo", "bar"]
version = ["1.0", "2.0"]
}
target = tgt
args = {
VERSION = version
}
}
Plusieurs valeurs par cible de matrice
Si vous souhaitez différencier la matrice sur plus qu'une seule valeur, vous pouvez utiliser des cartes comme valeurs de matrice. Bake crée une cible pour chaque carte, et vous pouvez accéder aux valeurs imbriquées en utilisant la notation par points.
L'exemple suivant construit deux cibles :
app-foo-1-0
app-bar-2-0
target "app" {
name = "app-${item.tgt}-${replace(item.version, ".", "-")}"
matrix = {
item = [
{
tgt = "foo"
version = "1.0"
},
{
tgt = "bar"
version = "2.0"
}
]
}
target = item.tgt
args = {
VERSION = item.version
}
}