Automatisation de la documentation¶
Générer, valider et publier la documentation automatiquement pour réduire la friction et garantir sa fraicheur.
Pourquoi automatiser la documentation¶
La documentation manuelle présente un deficit structurel : elle est produite par des humains qui ont d'autres priorités et oubliee dès que l'urgence passe. L'automatisation ne remplacé pas la documentation humaine, mais comble les angles morts et maintient la cohérence sur les éléments techniques.
Trois niveaux d'automatisation :
- Génération : produire de la documentation à partir du code ou de la configuration
- Validation : vérifier la qualité et la conformité de la documentation existante
- Publication : déployer la documentation mise à jour sans intervention manuelle
Génération automatique¶
Infrastructure as Code¶
Les outils IaC peuvent générer leur propre documentation si les modules et ressources sont correctement annotes.
| Outil | Generateur | Sortie |
|---|---|---|
| Terraform | terraform-docs | Markdown avec inputs/outputs/resources |
| Ansible | ansible-doc | Documentation des rôles et modules |
| Helm | helm-docs | README des charts |
| OpenAPI / Swagger | swagger-codegen, redoc | Documentation API HTML/Markdown |
terraform-docs lit les annotations dans les fichiers .tf et produit un tableau structurée des variables, outputs et ressources. Il s'intégré directement dans un pipeline CI.
ansible-doc extrait les meta-informations des rôles Ansible (description, auteur, variables, tags) pour générer une référence consultable.
Documentation API¶
Pour les API internes, la génération à partir des spécifications OpenAPI garantit que la documentation est toujours synchrone avec le code :
- Les annotations dans le code source produisent la spec OpenAPI
- La spec OpenAPI alimente un portail de documentation (Redoc, Swagger UI)
- Le portail est publie automatiquement à chaque merge sur la branche principale
La documentation générée est complète mais ne remplacé pas les runbooks
terraform-docs liste toutes les variables d'un module, mais ne dit pas comment diagnostiquer un échec de provisioning. La documentation générée couvre le "quoi", la documentation humaine couvre le "pourquoi" et le "comment en cas de problème".
Documentation dans le pipeline CI¶
Intégrer la documentation dans la CI garantit qu'elle est mise à jour et validee à chaque changement.
graph LR
A["Commit IaC / doc"] --> B["Lint markdown"]
B --> C["Generation auto terraform-docs"]
C --> D["Validation liens et structure"]
D --> E["Build documentation site"]
E --> F["Publication automatique"] Étapes recommandees dans la CI¶
| Étape | Outil | Objectif |
|---|---|---|
| Lint markdown | markdownlint, vale | Cohérence style et qualité |
| Génération doc IaC | terraform-docs, helm-docs | Synchronisation avec le code |
| Vérification liens | markdown-link-check | Pas de liens morts |
| Build site | MkDocs, Docusaurus | Rendu final valide |
| Publication | GitHub Pages, S3, Netlify | Mise a disposition immédiate |
Linting de la documentation¶
Le linting détecté automatiquement les problèmes de qualité documentaire avant qu'ils atteignent la branche principale.
markdownlint¶
Vérifié la conformité syntaxique du Markdown : espaces inutiles, titres mal formates, listes incoherentes. Les règles sont configurables dans un fichier .markdownlint.json à la racine du dépôt.
vale¶
Vale est un linter de style textuel. Il peut enforcer :
- Un vocabulaire approuve (termes a utiliser, termes a éviter)
- Des règles de style (longueur des phrases, voix active/passive)
- Des règles métier (ne pas écrire "kill" pour un processus, utiliser "stop")
- Des règles de conformité (certaines expressions obligatoires pour les documents HDS)
Les règles vale sont définies dans des fichiers YAML et peuvent être versionnees dans le dépôt.
Règles custom¶
Pour les organisations avec des conventions spécifiques, les deux outils permettent de définir des règles personnalisees :
- Titres de runbooks doivent commencer par un verbe d'action
- Chaque page doit contenir un champ
owner - Les acronymes doivent être définis a leur première occurrence
Changelog infra¶
Un changelog d'infrastructure trace les évolutions de l'infrastructure dans le temps, distinct du changelog applicatif. Il répond à la question : "qu'est-ce qui a change sur notre infra cette semaine ?"
Générer depuis les commits IaC¶
Avec une convention de commits standardisee (Conventional Commits), un outil comme git-cliff ou conventional-changelog peut générer automatiquement un changelog structure :
| Type de commit | Entree changelog |
|---|---|
feat(infra): ajout cluster EKS prod | Nouvelle fonctionnalité infrastructure |
fix(reseau): correction regles firewall | Correction |
chore(terraform): upgrade providers | Maintenance |
security: rotation certificats wildcard | Sécurité |
Bonnes pratiques pour les commits IaC¶
- Un commit = un changement logique (pas "wip" ou "fix")
- Message en français ou en anglais, au choix de l'équipe, mais cohérent
- Inclure le périmètre impacte dans le scope :
fix(prod/bdd): ... - Referencez le ticket de changement dans le footer du commit
Le changelog infra est une documentation de conformité
Pour les audits ISO 27001 ou HDS, un changelog infra généré automatiquement depuis Git est une preuve de traçabilité des changements directement exploitable. Conservez-le au moins 3 ans.