矩陣目標
目錄
矩陣策略允許你根據指定的引數將單個目標分叉成多個不同的變體。這與 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-0
app-foo-2-0
app-bar-1-0
app-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-0
app-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
}
}