Jdi na navigaci

Vytváření images

Pomocí GitLab CI je možné automatizovaně vytvářet kontejnerové (docker) images a ty nahrávat do lokálního GitLab Container Registry. Na internetu lze nalézt několik různých postupů, ale ne všechny fungují v našem prostředí. Tento návod tedy předkládá doporučený a ověřený postup.

Pro sestavování images na CI nepoužívejte docker, ale nástroj určený pro sestavování images: buildah.

Pomocí ict/images/buildah

Připravili jsme pro vás image ict/images/buildah, který obsahuje nástroj buildah a některé kroky provede za vás (nastavení prostředí, přihlášení do GitLab Registry).

Ukázka 1. Ukázka použití
build:
  image: $CI_REGISTRY/ict/images/buildah:v1
  variables:
    IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME  1
  script:
    - buildah build --squash --tag $IMAGE_TAG -f Dockerfile  2
    - buildah push $IMAGE_TAG  3
  1. Název image musí začínat $CI_REGISTRY_IMAGE (obsahuje URL Registry a cestou daného repositáře). Více v dokumentaci GitLabu.
  2. Sestaví image podle Dockerfile v aktuálním adresáři, sloučí všechny vrstvy do jedné a označí ho tagem $IMAGE_TAG (obdoba příkazu docker build). [1]
  3. Nahraje image do GitLab Registry.

Obecný postup

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

  1. Nainstalovat balíček buildah.
  2. Nastavit proměnnou prostředí BUILDAH_ISOLATION=chroot.
  3. Přihlásit se do Registry: buildah login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY.
  4. Sestavit image, např.: buildah build --squash --tag $CI_REGISTRY_IMAGE:<tag> .
  5. Nahrát image do Registry: buildah push $CI_REGISTRY_IMAGE:<tag>.
Ukázka 2. Ukázka s použitím Alpine image
build:
  image: $CI_REGISTRY/ict/images/alpine/ci:latest
  variables:
    BUILDAH_ISOLATION: chroot
  before_script:
    - apk add buildah
    - buildah login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - buildah info
  script:
    - buildah build --squash --tag "$CI_REGISTRY_IMAGE:latest" .
    - buildah push "$CI_REGISTRY_IMAGE:latest"

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. Výchozí formát metadat image je OCI. Pokud z nějakého důvodu potřebujete zastaralý docker formát, použijte --format docker. Více viz dokumentace buildah.