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).
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
- Název image musí začínat
$CI_REGISTRY_IMAGE
(obsahuje URL Registry a cestou daného repositáře). Více v dokumentaci GitLabu. - Sestaví image podle
Dockerfile
v aktuálním adresáři, sloučí všechny vrstvy do jedné a označí ho tagem$IMAGE_TAG
(obdoba příkazudocker build
). [1] - Nahraje image do GitLab Registry.
Obecný postup
Obecný postup (bez použití buildah image výše) je následující:
- Nainstalovat balíček
buildah
. - Nastavit proměnnou prostředí
BUILDAH_ISOLATION=chroot
. - Přihlásit se do Registry:
buildah login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
. - Sestavit image, např.:
buildah build --squash --tag $CI_REGISTRY_IMAGE:<tag> .
- Nahrát image do Registry:
buildah push $CI_REGISTRY_IMAGE:<tag>
.
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
- 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. ↩