矩陣目標
目錄
矩陣策略可讓您根據指定的參數將單一目標分支成多個不同的變體。這與 GitHub Actions 的矩陣策略 的運作方式類似。您可以使用它來減少 Bake 定義中的重複。
matrix 屬性是參數名稱到值清單的映射。Bake 會將每個可能的值組合建置為個別的目標。
每個產生的目標都必須具有唯一的名稱。要指定目標名稱應如何解析,請使用 name 屬性。
以下範例將 app 目標解析為 `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
}
}
每個矩陣目標多個值
如果您想區分具有多個值的矩陣,您可以使用映射作為矩陣值。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
}
}