TGViewer
Сочный DevOps Сочный DevOps @andtree_sec · 420 subscribers
Post #108 36
Реальный пример использования buildx с образом nginx с одного из проектов

Первый файл, это buildx-common.hcl, определят общие настройки, задает группы.
# Base variables
variable "CI_REGISTRY_IMAGE" { default = "registry/nginx:master-latest" }
variable "CI_COMMIT_REF_SLUG" { default = "dev-local" }
variable "CI_COMMIT_SHORT_SHA" { default = "00000000" }
variable "CI_PIPELINE_IID" { default = "00000" }
variable "IMG_SEMVER" { default = "v0.0.1" }
variable "CI_DEFAULT_BRANCH" { default = "main" }

# Secrets
variable "NPM_REPO_TOKEN" { default = "job_token" }

# Docker images variables
IMAGE_TAG = "${CI_COMMIT_REF_SLUG}-${CI_PIPELINE_IID}"
IMAGE_TAG_LATEST = "${CI_COMMIT_REF_SLUG}-latest"

IMG_TAGS = (
"${CI_COMMIT_REF_SLUG}" == "${CI_DEFAULT_BRANCH}"
? [
"${CI_REGISTRY_IMAGE}/nginx:${IMAGE_TAG}",
"${CI_REGISTRY_IMAGE}/nginx:${IMAGE_TAG_LATEST}",
"${CI_REGISTRY_IMAGE}/nginx:${IMG_SEMVER}"
]
: [
"${CI_REGISTRY_IMAGE}/nginx:${IMAGE_TAG}",
"${CI_REGISTRY_IMAGE}/nginx:${IMAGE_TAG_LATEST}",
"${CI_REGISTRY_IMAGE}/nginx:${IMG_SEMVER}-${CI_COMMIT_REF_SLUG}"
]
)


group "default" {
targets = ["nginx"]
}


Тут можно использовать тернарный оператор для более гибкого управления тегированием, если это конечно нужно в проекте.

Основной файл buildx-nginx.hcl:
target "default" {
context="."
dockerfile=".ops/docker/nginx.Dockerfile"
pull = true
secret = [
"id=npm_repo_token,src=${NPM_REPO_TOKEN}"
]
args = {
BUILDKIT_INLINE_CACHE = "1"
}
output = ["type=registry"]
}

target "nginx" {
inherits = ["default"]
target = "nginx"
tags = "${IMG_TAGS}"
cache-from = [
"${CI_REGISTRY_IMAGE}/nginx:${IMAGE_TAG_LATEST}",
"${CI_REGISTRY_IMAGE}/nginx:master-latest"
]
}

target nginx внутри этого файла соответствует targets из group default основного файла. Таргетов и групп может быть разное кол-во, это позволяет удобно управлять сборкой.
cache-from - получает кэш из указанных образов.
secret - используется для "монитрования" сикретов в Dockerfile. Подробнее об этом в официальной документации.

Сама сборка с помощью bake:
docker buildx bake --file $BUILDX_COMMON_FILE --file $BUILDX_FILE $target


В gitlab-ci $targets можно передать список значений через пробел:
build:nginx:
stage: build
variables:
BUILDX_COMMON_FILE: "buildx-common.hcl"
BUILDX_FILE: "buildx-nginx.hcl"
TARGETS: default


#gitlab
#ci
More from @andtree_sec
  1. Sep 7, 2026Давненько не было сообщений. Скорее всего в будущем они уйдут в telegraf, который я еще не…
  2. Jul 6, 2026Последнее время на работе часто приходится работать с apache flink и даже что-то писать на…
  3. Jun 4, 2026Немножко про молекула тесты... У нас принято использовать в переменных lookup плагин для д…
  4. May 20, 2026Очередной небольшой проект. Веб-приложение, которое агрегирует через стандартный механиз g…
  5. May 15, 2026Включаем профилирование в ansible Профилирование, это вывод даты, времени запуска и итогов…
  6. Apr 17, 2026Так выглядит общий dashbord работы с инцидентами.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →