功能
目录
HCL 函数非常适合在构建中操作值 配置,而不仅仅是 concatenation 或 interpolation。
标准库
Bake 附带了对 go-cty
标准库函数的内置支持。
以下示例显示了该函数。add
docker-bake.hcl
variable "TAG" {
default = "latest"
}
group "default" {
targets = ["webapp"]
}
target "webapp" {
args = {
buildno = "${add(123, 1)}"
}
}
$ docker buildx bake --print webapp
{
"group": {
"default": {
"targets": ["webapp"]
}
},
"target": {
"webapp": {
"context": ".",
"dockerfile": "Dockerfile",
"args": {
"buildno": "124"
}
}
}
}
用户定义的函数
您可以创建用户定义的函数,如果内置的标准库函数不能执行所需的操作 满足您的需求。
以下示例定义一个函数。increment
docker-bake.hcl
function "increment" {
params = [number]
result = number + 1
}
group "default" {
targets = ["webapp"]
}
target "webapp" {
args = {
buildno = "${increment(123)}"
}
}
$ docker buildx bake --print webapp
{
"group": {
"default": {
"targets": ["webapp"]
}
},
"target": {
"webapp": {
"context": ".",
"dockerfile": "Dockerfile",
"args": {
"buildno": "124"
}
}
}
}
函数中的变量
您可以引用变量和标准库 函数。
您不能从其他函数引用用户定义的函数。
以下示例在自定义函数中使用全局变量 ()。REPO
docker-bake.hcl
# docker-bake.hcl
variable "REPO" {
default = "user/repo"
}
function "tag" {
params = [tag]
result = ["${REPO}:${tag}"]
}
target "webapp" {
tags = tag("v1")
}
打印带有标志的 Bake 文件显示函数
使用 value of 设置标记的前缀。--print
tag
REPO
$ docker buildx bake --print webapp
{
"group": {
"default": {
"targets": ["webapp"]
}
},
"target": {
"webapp": {
"context": ".",
"dockerfile": "Dockerfile",
"tags": ["user/repo:v1"]
}
}
}