Introduction#
La CI/CD (Intégration Continue et Déploiement Continu) est le pilier du DevOps moderne. Elle garantit que les modifications de code sont automatiquement construites, testées et livrées en production avec un minimum d’intervention manuelle. La CI/CD s’inscrit dans la philosophie de l’Infrastructure as Code (IaC) : les pipelines, configurations et déploiements sont définis sous forme de code, versionnés et reproductibles.
Dans cet article, j’expliquerai chaque étape d’une pipeline CI/CD, en l’illustrant avec mon environnement auto-hébergé utilisant Gitea, Hugo, Docker, Semaphore et Ansible.

1. Planification#
La première phase consiste à planifier : définir ce qui doit être fait et comment. Une bonne planification réduit les ambiguïtés pour les phases suivantes.
- Définir les tâches et les spécifications.
- Choisir vos outils.
Les tableaux en vue kanban Gitea, GitLab ou Notion sont, je trouve, idéaux pour organiser et suivre les tâches.
2. Développement#
La phase de développement est celle où vous implémentez les tâches planifiées.
- Utilisez un IDE pour coder efficacement.
- Utilisez Git pour le versionnage et un serveur Git distant (GitHub, GitLab ou Gitea) pour stocker le code et collaborer.
Chaque commit sur votre serveur distant peut déclencher des pipelines qui construisent, testent, publient et déploient automatiquement.
Pour Gitea, cela nécessite :
- Un dossier
.gitea/workflowsdans votre dépôt. - Un Gitea Runner configuré pour exécuter les jobs.
Exemple de structure de pipeline :
name: Ma Pipeline
run-name: Construction & Déploiement
on:
push:
paths:
- <dossier-à-surveiller>
branches:
- main
jobs:
build:
runs-on: <runner>
container:
image: <image-de-construction>
steps:
(...)
test:
runs-on: <runner>
needs: build
steps:
(...)
release:
runs-on: <runner>
needs: test
steps:
(...)
deploy:
runs-on: <runner>
needs: release
steps:
(...)
Dans cet article, j’utiliserai mon blog comme exemple, bien que des méthodes plus simples existent.
3. Construction (Build)#
Lors de la phase de construction, votre code est compilé, packagé ou généré. Pour mon blog Hugo :
hugo --minify
Les fichiers générés sont stockés sous forme d’artefacts pour les étapes suivantes :
- name: Télécharger les fichiers
uses: actions/upload-artifact@v3
with:
name: artefacts-hugo
path: public/
Les artefacts permettent aux jobs ultérieurs (publication, déploiement) d’accéder de manière fiable aux résultats de la construction.
4. Test#
Les tests garantissent que votre code est sécurisé, fonctionnel et maintenable.
- Exécutez des tests unitaires (chaque composant fait son job), tests d’intégration (l’ensemble des composants font leurs jobs), linters (le code reste lisible et cohérent), SAST (le code ne possède pas de vulnérabilité connue)/DAST (l’application ne possède pas de faille exploitable) ou des vérifications personnalisées.
- Pour mon blog, les tests peuvent inclure des vérifications de grammaire ou de liens brisés par exemple.
5. Publication (Release)#
La phase de publication package vos artefacts pour le déploiement.
- D’abord, télécharger les artefacts :
- name: Télécharger les fichiers
uses: actions/download-artifact@v3
with:
name: artefacts-hugo
path: public/
- Ensuite, créer une image Docker avec les fichiers et push vers le registry :
- name: Pousser l’image Docker
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: |
<URL_GITEA>/${{ secrets.USER_REGISTRY }}/blog:<version>
Notes :
- Les secrets stockent les identifiants de manière sécurisée (
USER_REGISTRYdans Gitea).- La version est incrémentée automatiquement à partir du dernier tag.
6. Déploiement (Deploy)#
Le déploiement peut être automatisé avec des outils comme ArgoCD ou Semaphore.
- Dans mon environnement, je déclenche les déploiements via des webhooks depuis la pipeline CI avec Semaphore.
- Un déploiement manuel est aussi possible si l’automatisation n’est pas requise.
7. Surveillance (Monitor)#
La surveillance assure que votre application et votre infrastructure restent saines et performantes.
- Définissez ce que vous surveillez (disponibilité, métriques, logs).
- Choisissez vos outils : tableaux de bord, notifications, alertes. Dans mon homelab :
- Kuma Uptime pour la disponibilité.
- Prometheus + Grafana pour les métriques, avec des notifications Discord via webhooks.
8. Exploitation (Operate)#
Les opérations post-déploiement garantissent que le système reste à jour et cohérent.
- Dans mon homelab, j’utilise Ansible et Semaphore pour gérer automatiquement les configurations et les mises à jour.
Conclusion#
La CI/CD est comme une chaîne de montage pour le logiciel : chaque job gère une étape spécifique, faisant passer le code du développement à la production de manière fluide et automatique.

