Найти в Дзене

Реальный пример использования buildx с образом nginx с одного из проектов

Реальный пример использования 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_T

Реальный пример использования 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