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"
      }
    }
  }
}

더 알아보기 (Learn more)