函數

當您需要以比單純的串接或插值更複雜的方式處理建置配置中的值時,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"
      }
    }
  }
}

函數中的變數

您可以在函數內部參照變數和標準函式庫函數。

您無法從其他函數中參照使用者自定義函數。

以下範例在自定義函數中使用全域變數 (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 的值來設定標籤的前綴。

$ docker buildx bake --print webapp
{
  "group": {
    "default": {
      "targets": ["webapp"]
    }
  },
  "target": {
    "webapp": {
      "context": ".",
      "dockerfile": "Dockerfile",
      "tags": ["user/repo:v1"]
    }
  }
}
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.