feat(ci): support private Docker registry via env vars
CI / lint (push) Failing after 8s
CI / matrix (push) Failing after 9s
CI / test (push) Has been skipped

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.
This commit is contained in:
2026-04-14 00:28:40 +02:00
parent 54287ad9a0
commit bd125b0b57
2 changed files with 55 additions and 1 deletions
+44
View File
@@ -158,6 +158,50 @@ all:
remote_users_fact_state: absent 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 ## Utilisation dans d'autres playbooks
```yaml ```yaml
+11 -1
View File
@@ -2,6 +2,7 @@
"""Parse meta/main.yml platforms and output a Docker test matrix as JSON.""" """Parse meta/main.yml platforms and output a Docker test matrix as JSON."""
import json import json
import os
import sys import sys
from pathlib import Path from pathlib import Path
@@ -18,6 +19,14 @@ PLATFORM_IMAGE_MAP = {
"Ubuntu": "ubuntu", "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]: def build_matrix(meta_path: str = "roles/remote_users_fact/meta/main.yml") -> list[dict]:
meta_file = Path(meta_path) meta_file = Path(meta_path)
if not meta_file.exists(): 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", []): for version in platform.get("versions", []):
version_str = str(version) version_str = str(version)
slug = f"{name.lower()}{version_str}" if name == "EL" else f"{name.lower()}-{version_str}" slug = f"{name.lower()}{version_str}" if name == "EL" else f"{name.lower()}-{version_str}"
base_image = f"{image_prefix}:{version_str}"
matrix.append({ matrix.append({
"slug": slug, "slug": slug,
"image": f"{image_prefix}:{version_str}", "image": _resolve_image(base_image),
"platform": name, "platform": name,
"version": version_str, "version": version_str,
}) })