矩阵目标
目录
矩阵策略允许您将单个目标分叉为多个不同的 variants,具体取决于您指定的参数。这与 GitHub Actions 的 Matrix 策略类似。 您可以使用它来减少 Bake 定义中的重复。
matrix 属性是参数名称到值列表的映射。烤 将每个可能的值组合构建为单独的目标。
每个生成的目标都必须具有唯一的名称。指定目标名称 应该解决,请使用 name 属性。
以下示例将应用程序目标解析为 和 。它
还使用 matrix 值来定义目标构建阶段。app-foo
app-bar
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"
}
}
}
多轴
您可以在矩阵中指定多个键,以便在多个轴上对目标进行分叉。 使用多个矩阵键时,Bake 会构建所有可能的变体。
以下示例构建了四个目标:
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
}
}
每个矩阵目标多个值
如果要对矩阵进行多个值的微分,请使用 可以将 Map 用作矩阵值。Bake 为每个映射创建一个目标,您可以 使用点表示法访问嵌套值。
以下示例构建两个目标:
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
}
}