矩阵目标
目录
矩阵策略允许你根据指定的参数将单个目标分叉成多个不同的变体。这与 GitHub Actions 的矩阵策略类似。你可以利用此功能减少 Bake 定义中的重复。
矩阵属性是一个将参数名称映射到值列表的映射。Bake 会将所有可能的值组合构建为单独的目标。
每个生成的目标都必须有唯一的名称。要指定目标名称的解析方式,请使用名称属性。
以下示例将 app 目标解析为 `app-foo` 和 `app-bar`。它还使用矩阵值来定义目标构建阶段。
docker-bake.hcl
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-0app-foo-2-0app-bar-1-0app-bar-2-0
docker-bake.hcl
target "app" {
name = "app-${tgt}-${replace(version, ".", "-")}"
matrix = {
tgt = ["foo", "bar"]
version = ["1.0", "2.0"]
}
target = tgt
args = {
VERSION = version
}
}每个矩阵目标多个值
如果你想在除了单个值之外的更多方面区分矩阵,你可以使用映射作为矩阵值。Bake 会为每个映射创建一个目标,你可以使用点符号访问嵌套值。
以下示例构建了两个目标
app-foo-1-0app-bar-2-0
docker-bake.hcl
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
}
}