Jdi na navigaci

Vytváření images

Pomocí GitLab CI je možné automatizovaně vytvářet kontejnerové (OCI) images a ty nahrávat do lokálního GitLab Container Registry.

Pro vytváření image doporučujeme použít nástroj buildah pomocí image ict/images/buildah viz Doporučený postup.

Připravili jsme pro vás image ict/images/buildah, který obsahuje nástroj buildah a některé kroky provede za vás, zároveň je průběžně aktualizovaný a oddělení ICT se stará o opravu potenciálch chyb mezi aktualziacemi.

Ukázka použití v .gitlab-ci.yml:

build:
  image: $CI_REGISTRY/ict/images/buildah:latest  1
  variables:
    IMAGE_TAG: my-image:latest  2
  script:
    - buildah build --tag $IMAGE_TAG -f Containerfile  3
    - buildah push $IMAGE_TAG $CI_REGISTRY_IMAGE/$IMAGE_TAG  4
  1. Alpine Linux s předkonfigurovaným nástrojem buildah, který nastaví prostředí[1] a přihlásí vás do $CI_REGISTRY.
  2. Název vašeho nového image
  3. Příkaz, který sestaví váš image podle definice v souboru Containerfile. Při použití Dockerfile lze smazat tento argument.
  4. Příkaz, který pushne image do Container Registry aktuálního projektu.

Příklad souboru Containerfile:

# Create from Docker Hub image alpine:v3.23.
# This gets overridden in case of using 'buildah --from' argument
FROM alpine:3.23

# Install ca-certificates & curl
RUN apk update && apk add ca-certificates curl

# Set TimeZone variable to Europe/Prague
ENV TZ='Europe/Prague'

# set EU/Prague as localtime
RUN ln -sf /usr/share/zoneinfo/Europe/Prague /etc/localtime

Obecný postup

Obecný postup (bez použití buildah image výše) je následující:

  1. Nainstalovat balíčky buildah, fuse-overlayfs a netavark (Alpine v rámci minimalizace neinstaluje drivery pro síť a filesystem).
  2. Nastavit proměnnou prostředí BUILDAH_ISOLATION=chroot.[2]
  3. Přihlásit se do GitLab registry: buildah login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY.
    1. Pokud má být image stavěn pomocí image z Docker Hubu a projekt je ve skupině, přihlásit se také k GitLab dependency proxy:
      buildah login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_DEPENDENCY_PROXY_SERVER.
  4. Sestavit image, např.: buildah build --tag pkg:stable, při použití dependency proxy lze přidat argument --from.
  5. Nahrát image do Registry: buildah push pkg:stable $CI_REGISTRY_IMAGE/pkg:stable.

Tipy

Spuštění příkazu v image

Pokud potřebujete image v rámci pipeline „spustit“ (tj. vytvořit z něj kontejner a v něm spustit příkaz), např. pro ověření funkčnosti, provedete to následovně:

ctr=$(buildah from $IMAGE_TAG)
buildah run $ctr -- command arg1 arg2 argn

  1. export BUILDAH_ISOLATION="chroot"
  2. Platí pro Alpine Linux. Debian/Ubuntu tento krok nevyžaduje.