Komponentu odpowiedzialne za budowanie i publikacje kontenerów.
1 - 🛠 Job template: 🚀 Image bulder
Job Build & publish container image
umożliwia budowanie i publikację obrazów kontenerów w rejestrze Docker/GitLab z użyciem narzędzia Buildah. Szablon wspiera wieloetapowy proces: budowanie, publikowanie i testowanie obrazu. Idealny do wykorzystania w etapach build
, publish
i integration-test
w pipeline’ach CI/CD.
Wymagania wstępne
- Buildah – wbudowany w używany obraz Dockera (ustawiany przez
inputs.docker_image
). - Dostęp do rejestru Docker/GitLab (
CI_REGISTRY
,CI_REGISTRY_USER
,CI_REGISTRY_PASSWORD
). - Plik konfiguracyjny obrazu kontenera (
buildah_config_path
).
⚙️ Parametry wejściowe (inputs
)
Nazwa | Typ | Domyślna wartość | Opis |
---|---|---|---|
docker_image |
string | registry.gitlab.com/pl.rachuna-net/containers/buildah:1.0.0 |
Obraz Dockera zawierający narzędzie Buildah |
logo_url |
string | https://gitlab.com/pl.rachuna-net/cicd/gitlab-ci/-/raw/main/_configs/_logo?ref_type=heads |
Adres URL logo wyświetlanego w logach |
buildah_config_path |
string | config.yml |
Ścieżka do definicji obrazu kontenera w formacie YAML |
container_version |
string | latest |
Wersja obrazu kontenera, który będzie budowany |
docker_test_script_path |
string | container_test.sh |
Ścieżka do skryptu testowego uruchamianego w zbudowanym obrazie (job 🧪 test docker image ) |
🧬 Zmienne środowiskowe ustawiane w jobie
CONTAINER_IMAGE_BUILDAH
– obraz Dockera Buildah (na podstawieinputs.docker_image
)LOGO_URL
– ścieżka do logo (na podstawieinputs.logo_url
)CONTAINER_VERSION
– wersja obrazu (na podstawieinputs.container_version
)FULL_IMAGE_NAME
– pełna nazwa obrazu:$CI_REGISTRY_IMAGE:$CONTAINER_VERSION
BUILDAH_CONFIG_FILE_PATH
– ścieżka do pliku konfiguracji Buildah (na podstawieinputs.buildah_config_path
)DOCKER_TEST_SCRIPT_PATH
– skrypt testowy do uruchomienia w kontenerze- Dodatkowe zmienne konfiguracyjne Buildah:
STORAGE_DRIVER
,BUILDAH_FORMAT
,BUILDAH_ISOLATION
,BUILDAH_STORAGE_ROOT
,BUILDAH_STORAGE_RUNROOT
📤 Output
Szablon wykonuje następujące kroki:
-
Budowanie obrazu kontenera na podstawie
buildah_config_path
:- Pobranie obrazu bazowego (
base_image
) - Instalacja pakietów i certyfikatów
- Dodanie repozytoriów (
custom_repos
) - Kopiowanie plików i ustawienie zmiennych środowiskowych
- Tworzenie użytkownika nie-root (opcjonalnie)
- Ustawienie
ENTRYPOINT
orazCMD
- Pobranie obrazu bazowego (
-
Zapis obrazu do tarballa (
container-image.tar
). -
Publikacja obrazu w rejestrze Docker/GitLab (job
🌐 publish container image
). -
Testowanie obrazu z wykorzystaniem skryptu testowego (job
🧪 test docker image
).
🧪 Dostępne joby
🚀 build container image
Buduje obraz kontenera na podstawie pliku konfiguracyjnego config.yml
Przykładowy plik config yml:
---
base_image: ubuntu:noble
labels:
maintainer: "Maciej Rachuna <rachuna.maciej@gmail.com>"
version: "1.0.0"
image_source: "https://gitlab.com/pl.rachuna-net/containers/terraform"
env:
DEBIAN_FRONTEND: noninteractive
TF_IN_AUTOMATION: "true"
LANG: C.UTF-8
before_build_commands:
## terraform docs
- curl -sLo ./terraform-docs.tar.gz https://github.com/terraform-docs/terraform-docs/releases/download/v0.20.0/terraform-docs-v0.20.0-linux-amd64.tar.gz
- tar -xzf terraform-docs.tar.gz
- chmod +x terraform-docs
## terraform lint
- curl -sLo ./tflint_linux_amd64.zip https://github.com/terraform-linters/tflint/releases/download/v0.58.1/tflint_linux_amd64.zip
- unzip tflint_linux_amd64.zip
- chmod +x tflint
packages:
- bash
- curl
- git
- gnupg2
- jq
- libssl3
- lsb-release
- openssh-client
- ca-certificates
- gnupg
- terraform
custom_repos:
- name: hashicorp
key_url: https://apt.releases.hashicorp.com/gpg
key_path: /usr/share/keyrings/hashicorp-archive-keyring.gpg
repo_entry: >-
deb [arch=amd64 signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg trusted=yes] https://apt.releases.hashicorp.com noble main
extra_commands:
- chmod 777 /opt/scripts
- chmod 777 /opt/scripts/*
- terraform --version
- terraform-docs -v
- tflint --version
copy:
- source: scripts/
destination: /opt/scripts/
- source: terraform-docs
destination: /usr/local/bin/terraform-docs
- source: tflint
destination: usr/local/bin/tflint
user:
name: nonroot
shell: /bin/bash
home: /home/nonroot
chown: /opt/scripts/
entrypoint: "/opt/scripts/entrypoint.bash"
cmd: "/bin/bash"
🌐 publish container image
Publikuje zbudowany obraz do gitlab registry:
🧪 test docker image
Testuje opublikowany obraz kontenera uruchamiając w nim skrypt bashowy domyślnie container_test.sh
:
🧪 Przykład użycia w pipeline
---
default:
tags:
- process-ci
include:
- component: $CI_SERVER_FQDN/pl.rachuna-net/cicd/components/containers/image-builder@$COMPONENT_VERSION_CONTAINERS
🚀 build container image:
needs:
- job: 🕵 YAML lint
optional: true
- job: 🔬 Validate files (conftest)
- job: 🕵 Set Version
artifacts: true
stage: build
rules:
- when: on_success
🌐 publish container image:
stage: publish
variables:
CONTAINER_VERSION: 1.2.3
needs:
- job: 🕵 Set Version
artifacts: true
- job: 🚀 build container image
artifacts: true
rules:
- when: on_success
🧪 test docker image:
variables:
CONTAINER_VERSION: 1.2.3
needs:
- job: 📍 Publish Version
artifacts: true
- job: 🌐 publish container image
artifacts: true
rules:
- when: on_success