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.
This commit is contained in:
@@ -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
@@ -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,
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user