Bake에서의 표현식 평가
Bake에서의 표현식 평가 (Expression evaluation in Bake)
HCL 형식의 Bake 파일은 표현식 평가(expression evaluation)를 지원해요. 덕분에 산술 연산을 수행하거나 값의 조건부 설정 같은 일을 할 수 있답니다.
출처: 문서
본문
산술 연산 (Arithmetic operations)
표현식에서 산술 연산을 수행할 수 있어요. 다음 예시는 두 숫자를 곱하는 방법을 보여줘요:
sum = 7*6
target "default" {
args = {
answer = sum
}
}
이 표현식은 sum을 build argument로 넘겨줘요. --print로 확인하면:
$ docker buildx bake --print
{
"target": {
"default": {
"context": ".",
"dockerfile": "Dockerfile",
"args": {
"answer": "42"
}
}
}
}
삼항 연산자 (Ternary operators)
삼항 연산자로 값을 조건부로 등록할 수 있어요. 아래 예시는 TAG 변수가 비어 있지 않을 때만 추가 태그를 만들어요:
variable "TAG" {}
target "default" {
context="."
dockerfile="Dockerfile"
tags = [
"my-image:latest",
notequal("",TAG) ? "my-image:${TAG}": ""
]
}
TAG가 비어 있으면 my-image:latest 태그만 만들어져요:
$ docker buildx bake --print
{
"target": {
"default": {
"context": ".",
"dockerfile": "Dockerfile",
"tags": ["my-image:latest"]
}
}
}
변수를 활용한 표현식 (Expressions with variables)
변수와 함께 표현식을 쓰면 값의 조건부 설정이나 산술 연산을 할 수 있어요. 아래는 FOO > 5일 때만 "higher"로, IS_FOO가 참일 때만 "yes"로 설정하는 예시예요:
variable "FOO" {
default = 3
}
variable "IS_FOO" {
default = true
}
target "app" {
args = {
v1 = FOO > 5 ? "higher" : "lower"
v2 = IS_FOO ? "yes" : "no"
}
}
결과적으로 두 값이 build arguments로 다음과 같이 계산돼요:
$ docker buildx bake --print app
{
"group": {
"default": {
"targets": ["app"]
}
},
"target": {
"app": {
"context": ".",
"dockerfile": "Dockerfile",
"args": {
"v1": "lower",
"v2": "yes"
}
}
}
}