Construction d'image
Gabarit qui construit une image à partir d'un Dockerfile et la pousse vers le registre de l'instance, sans démon Docker ni mode privilégié : il tourne sur un runner Docker ordinaire (tag docker).
La construction est faite par kaniko, dans sa version maintenue (le kaniko de Google est archivé depuis 2025). Kaniko exécute les instructions du Dockerfile dans son propre conteneur, puis pousse l'image avec le jeton du job (CI_REGISTRY_USER / CI_REGISTRY_PASSWORD).
Le fichier ne définit aucun job concret : il fournit le job caché .image-build, que le projet étend avec ses propres règles.
Utilisation
include:
- project: kgaut/gitlab-ci-templates
ref: *CI_TEMPLATE_VERSION
file:
- '/templates/generic/stages-variables-extends.yml'
- '/templates/generic/image-build.yml'
build-image:
extends: .image-build
variables:
IMAGE_BUILD_DOCKERFILE: docker/app.dockerfile
IMAGE_BUILD_DESTINATION: $CI_REGISTRY_IMAGE/app:$CI_COMMIT_TAG $CI_REGISTRY_IMAGE/app:latest
rules:
- if: $CI_COMMIT_TAG
Sans IMAGE_BUILD_DESTINATION, l'image est construite sans être pouss ée : pratique pour vérifier un Dockerfile dans une merge request.
Variables
| Nom de la variable | Contenu | Exemple | Remarque |
|---|---|---|---|
| IMAGE_BUILD_DOCKERFILE | Dockerfile, relatif à la racine du dépôt | docker/app.dockerfile | par défaut Dockerfile |
| IMAGE_BUILD_CONTEXT | Contexte de construction, relatif à la racine du dépôt | docker | par défaut . |
| IMAGE_BUILD_DESTINATION | Référence(s) à pousser, séparées par des espaces | $CI_REGISTRY_IMAGE/app:1.2.0 | vide par défaut : construction sans push |
| IMAGE_BUILD_KANIKO_IMAGE | Image de kaniko utilisée par le job | ghcr.io/osscontainertools/kaniko:v1.28.5-debug | variante debug obligatoire (shell) |
Limites
- Le push n'est authentifié que pour le registre de l'instance (
CI_REGISTRY). Pour un autre registre, redéfinir lescriptdu job. - Kaniko ne fait pas de construction multi-plateforme : l'image est construite pour l'architecture du runner.
- Les
RUNs'exécutent dans le conteneur du job : un Dockerfile qui a besoin de privilèges (montages,--privileged) ne se construit pas ainsi.
Liste des jobs
.image-build
Job caché (stage predeploy) : construction de IMAGE_BUILD_DOCKERFILE, puis push vers chaque référence de IMAGE_BUILD_DESTINATION.