Skip to content

Image Builder

Dokumentacja techniczna

Pipeline CI/CD do budowania i publikowania obrazów kontenerów OCI przy użyciu buildah. Buduje obraz na podstawie deklaratywnego pliku config.yml i publikuje go do GitLab Container Registry.

W projekcie dodaj do .gitlab-ci.yml:

include:
  - project: pl.rachuna-net/flows/gitlab
    file: pipelines/image-builder/.gitlab-ci.yml
    ref: main

variables:
  PROJECT_TYPE: image-builder

Wymagany plik config.yml w root repozytorium:

base_image: ubuntu:22.04

labels:
  maintainer: team@example.com

packages:
  - curl
  - git

copy:
  - source: scripts/
    destination: /usr/local/bin/

env:
  APP_ENV: production

user:
  name: appuser
  uid: 1000
  shell: /bin/bash

entrypoint: ["/usr/local/bin/entrypoint.sh"]
.pre        → 🕵 Set Version
validate    → 🔍 Analyze Conventional Commits
            → 🕵 yamllint           (tylko gdy zmienił się *.yml/*.yaml)
            → 🐚 shellcheck         (tylko gdy zmienił się *.sh/*.sh.yml)
build       → 🚀 build              (needs: Set Version + validate joby, wszystkie optional)
publish     → 🌐 publish            (needs: Set Version + build, artifacts)
            → 📍 Publish Version
.pre        → 🔧 Prepare Dynamic Deployment
deployment  → 🚀 Trigger Deployment  → child pipeline
JobNazwa emojiStageCICD
versioning (Set Version)🕵 Set Version.pre
environment-deployment-prepare🔧 Prepare Dynamic Deployment.pre
conventional-commits🔍 Analyze Conventional Commitsvalidate
yamllint🕵 yamllintvalidate✅*
shellcheck🐚 shellcheckvalidate✅*
dependency📦 dependencydependency
build🚀 buildbuild
trigger-deployment🚀 Trigger Deploymentdeployment
deployment💥 deploymentdeployment❌**
unit-test🧪 unit-testtests
publish🌐 publishpublish
versioning (Publish Version)📍 Publish Versionpublish

* tylko gdy zmienił się odpowiedni typ pliku względem main ** zdefiniowany ale zakomentowany w .gitlab-ci.yml

Buduje obraz OCI z pliku config.yml przy użyciu buildah. Etapy budowania:

  1. Uruchamia before_build_commands z config
  2. Pobiera base_image i wykrywa rodzinę OS (debian/rhel/alpine)
  3. Instaluje CA certificates
  4. Konfiguruje custom repozytoria (custom_repos)
  5. Instaluje pakiety (packages)
  6. Kopiuje pliki (copy)
  7. Ustawia zmienne środowiskowe (env)
  8. Tworzy użytkownika (user)
  9. Konfiguruje entrypoint i cmd
  10. Commituje obraz jako $CI_REGISTRY_IMAGE:$RELEASE_CANDIDATE_VERSION
  11. Eksportuje do pliku container-image.tar (artefakt)

Ładuje container-image.tar z artefaktu i publikuje do GitLab Container Registry:

buildah login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
buildah push "$FULL_IMAGE_NAME" "docker://$FULL_IMAGE_NAME"

Obraz publikowany jako $CI_REGISTRY_IMAGE:$RELEASE_CANDIDATE_VERSION.

ZmiennaDomyślnaOpis
BUILDAH_CONFIG_FILE_PATHconfig.ymlŚcieżka do pliku konfiguracji obrazu
BUILDAH_STORAGE_ROOT/tmp/buildah-rootKatalog główny storage buildah
BUILDAH_STORAGE_RUNROOT/tmp/buildah-runrootKatalog run-root buildah

Zmienne GitLab CI używane automatycznie: CI_REGISTRY, CI_REGISTRY_USER, CI_REGISTRY_PASSWORD, CI_REGISTRY_IMAGE, RELEASE_CANDIDATE_VERSION (z artefaktu Set Version).

JobWymagany
🕵 Set Version✅ (artifacts)
🚀 build✅ (artifacts — container-image.tar)