函数(Functions)
Table of contents
当你需要以比简单拼接或插值更复杂的方式操作构建配置中的值时,HCL 函数非常有用。
标准库
Bake 内置支持 标准库函数。
以下示例展示了 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"
}
}
}
}函数中的变量
你可以在函数内部引用 variables 和标准库函数。
以下示例在一个自定义函数中使用了全局变量(REPO)。
docker-bake.hcl
# docker-bake.hcl
variable "REPO" {
default = "user/repo"
}
function "tag" {
params = [tag]
result = ["${REPO}:${tag}"]
}
target "webapp" {
tags = tag("v1")
}使用 --print 标志打印 Bake 文件,显示 tag 函数使用 REPO 的值来设置 tag 的前缀。
$ docker buildx bake --print webapp
{
"group": {
"default": {
"targets": ["webapp"]
}
},
"target": {
"webapp": {
"context": ".",
"dockerfile": "Dockerfile",
"tags": ["user/repo:v1"]
}
}
}