From bd125b0b5775fa6fd27775cc10306060aecab537 Mon Sep 17 00:00:00 2001 From: Fabien ZARIFIAN Date: Tue, 14 Apr 2026 00:28:40 +0200 Subject: [PATCH] feat(ci): support private Docker registry via env vars Add DOCKER_REGISTRY and DOCKER_REGISTRY_PREFIX environment variables to ci/build_matrix.py for pulling base images from a private registry (Artifactory, Harbor, etc.) instead of Docker Hub. Document CI usage and registry configuration in README. --- README.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ ci/build_matrix.py | 12 +++++++++++- 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 583bcd0..31680a2 100644 --- a/README.md +++ b/README.md @@ -158,6 +158,50 @@ all: remote_users_fact_state: absent ``` +## CI / Tests + +Le rôle est testé automatiquement sur toutes les distributions déclarées dans `meta/main.yml` via Docker. + +### Commandes Make + +```bash +make help # Affiche les cibles disponibles +make matrix # Affiche la matrice JSON des distros +make lint # yamllint + ansible-lint +make test # Teste toutes les distros +make test-el9 # Teste une seule distro +make clean # Supprime les images Docker de test +``` + +### Registry privée + +Par défaut les images sont tirées depuis Docker Hub. Pour utiliser une registry privée (Artifactory, Harbor, etc.), définir les variables d'environnement : + +| Variable | Défaut | Exemple | +|---|---|---| +| `DOCKER_REGISTRY` | *(vide = Docker Hub)* | `registry.nuevolia.dev` | +| `DOCKER_REGISTRY_PREFIX` | *(vide)* | `library/` | + +```bash +# Artifactory +DOCKER_REGISTRY=registry.nuevolia.dev DOCKER_REGISTRY_PREFIX=library/ make test + +# Harbor +DOCKER_REGISTRY=harbor.local DOCKER_REGISTRY_PREFIX=proxy/ make test +``` + +### Pipelines CI + +Trois configurations sont fournies : + +| Fichier | Système | Stratégie | +|---|---|---| +| `.gitea/workflows/ci.yml` | Gitea Actions | Matrix dynamique parallèle | +| `.gitlab-ci.yml` | GitLab CI | Séquentiel | +| `Jenkinsfile` | Jenkins | Stages parallèles | + +Les variables `DOCKER_REGISTRY` et `DOCKER_REGISTRY_PREFIX` peuvent être définies dans les secrets/variables de chaque CI. + ## Utilisation dans d'autres playbooks ```yaml diff --git a/ci/build_matrix.py b/ci/build_matrix.py index 021b21b..6be7ad2 100644 --- a/ci/build_matrix.py +++ b/ci/build_matrix.py @@ -2,6 +2,7 @@ """Parse meta/main.yml platforms and output a Docker test matrix as JSON.""" import json +import os import sys from pathlib import Path @@ -18,6 +19,14 @@ PLATFORM_IMAGE_MAP = { "Ubuntu": "ubuntu", } +def _resolve_image(image: str) -> str: + """Prefix image with registry and namespace if configured via env vars.""" + registry = os.environ.get("DOCKER_REGISTRY", "").strip().rstrip("/") + prefix = os.environ.get("DOCKER_REGISTRY_PREFIX", "").strip() + if registry: + return f"{registry}/{prefix}{image}" + return image + def build_matrix(meta_path: str = "roles/remote_users_fact/meta/main.yml") -> list[dict]: meta_file = Path(meta_path) if not meta_file.exists(): @@ -43,9 +52,10 @@ def build_matrix(meta_path: str = "roles/remote_users_fact/meta/main.yml") -> li for version in platform.get("versions", []): version_str = str(version) slug = f"{name.lower()}{version_str}" if name == "EL" else f"{name.lower()}-{version_str}" + base_image = f"{image_prefix}:{version_str}" matrix.append({ "slug": slug, - "image": f"{image_prefix}:{version_str}", + "image": _resolve_image(base_image), "platform": name, "version": version_str, })