3.3 KiB
CI/CD — dépôt ansible-hardening-linux
Même principe qu'ansible-centreon : Gitea contrôle le code, Semaphore l'exécute.
Une différence : Semaphore ne suit pas main mais la branche valide, qui n'avance
que depuis main et seulement après un contrôle réussi. Un commit qui casse le lint
n'atteint donc jamais Semaphore.
push / PR sur main ──► controle : yamllint, syntax-check, ansible-lint, clés présentes
│ succès (push sur main uniquement)
▼
promouvoir : main ──► valide
│
▼
Semaphore (dépôt sur branche « valide ») exécute site.yml
Contrôle du code — Gitea Actions
.gitea/workflows/ansible-lint.yml, job controle, sur chaque pull request et chaque
push vers main :
| Étape | Ce qu'elle attrape |
|---|---|
yamllint . |
indentation, lignes trop longues, valeurs booléennes douteuses |
ansible-playbook site.yml --syntax-check + --list-tasks |
playbook ou rôle cassé, tâche mal formée, variable manquante dans les rôles |
ansible-lint |
mauvaises pratiques, modules dépréciés, tâches sans changed_when — profil production |
| clés présentes | un répertoire files/keys/<compte>/ sans fichier .pub verrouillerait ce compte |
vault.yml étant chiffré, le syntax-check utilise vault.yml.example à sa place si le
mot de passe n'est pas disponible dans la CI (il ne l'est pas, volontairement).
Promotion — job promouvoir
Sur un push validé sur main, le job pousse le même commit sur valide. Il lui faut :
- un secret de dépôt
GITEA_TOKEN_PROMOTION: jeton d'un compte (de préférence un compte technique) autorisé à écrire survalide; - la branche
valideprotégée dans Gitea, avec ce seul compte en liste blanche de push, pour qu'aucun humain ne puisse y pousser directement.
Exécution — Semaphore
À créer une fois dans le projet Semaphore :
- Dépôt : l'URL Gitea de
ansible-hardening-linux, branchevalide. - Clé SSH : la clé privée du compte de connexion (
ansibleavec sudo, ourootcomme sur les VM Terraform). Sa clé publique doit figurer dansfiles/keys/<compte>/— c'est ce que vérifie le rôlesshavant de durcir. - Mot de passe du vault : entrée dédiée du magasin de clés, pointée par le modèle
de tâche, ou
ANSIBLE_VAULT_PASSWORD_FILEdans l'environnement du modèle. - Inventaire :
inventory/hosts.ymldu dépôt (versionné), ou un inventaire Semaphore si les hôtes changent souvent. - Modèle
Simulation:site.ymlavec--check --diff— à utiliser pour tout premier passage sur un hôte. - Modèle
Configuration:site.yml. - Modèle
SSH seul:site.yml --tags ssh, pratique pour la rotation des clés.
Semaphore installe les collections de collections/requirements.yml avant chaque exécution.
Secrets
Rien de secret ne transite par Gitea : les communautés SNMP et les mots de passe SNMPv3
sont dans group_vars/all/vault.yml, chiffré, et seul Semaphore détient le mot de passe
du vault. Les clés publiques SSH et les certificats racine sont versionnés en clair :
ce sont des éléments publics.