Comparaison des solutions CI/CD¶
Cette page alimente un ADR (Architecture Decision Record) pour le choix de la plateforme CI/CD. Voir le format ADR dans Documenter son code — ADR.
Grille de comparaison¶
| Critère | Gitea Actions | Flux v2 (FluxCD) | Jenkins | GitLab CI | Tekton |
|---|---|---|---|---|---|
| Licence | MIT | Apache 2.0 | MIT | MIT (CE) / Proprietary (EE) | Apache 2.0 |
| Capacité CI | Oui (native) | Non (CD uniquement) | Oui (historique) | Oui (native) | Oui (pipelines) |
| Capacité CD / GitOps | Basique (deploy steps) | Oui (natif, reconciliation) | Via plugins | Oui (environments) | Via Triggers + CD pipeline |
| Langage pipeline | YAML (GitHub Actions compat) | YAML (Kustomization, HelmRelease) | Groovy (Jenkinsfile) | YAML (.gitlab-ci.yml) | YAML (Task/Pipeline CRD) |
| Modèle de runner | act runner (conteneur) | N/A (controllers in-cluster) | Agents (VM, conteneur, bare) | GitLab Runner (conteneur, VM) | TaskRun (Pod Kubernetes) |
| Gestion des secrets | Variables chiffrees + Vault | SOPS, Sealed Secrets, Vault CSI | Credentials plugin + Vault | Variables CI + Vault | Kubernetes Secrets + Vault |
| Marketplace / Plugins | GitHub Actions compatible | Ecosysteme Kubernetes natif | 1800+ plugins | Templates CI, composants | Tekton Hub (catalog) |
| Empreinte ressources | Légère (~128 Mo runner) | Très légère (~200 Mo total) | Lourde (~1 Go+ controller JVM) | Moyenne (~512 Mo runner) | Légère (~128 Mo controller) |
| Kubernetes-native | Non (runner externe) | Oui (CRD natifs, CNCF graduated) | Non (plugin Kubernetes) | Non (runner externe) | Oui (CRD natifs) |
| Courbe d'apprentissage | Basse (syntax GitHub) | Moyenne (concepts GitOps + CRD) | Haute (Groovy, plugins) | Basse (YAML intuitif) | Haute (CRD, abstractions) |
Analyse détaillée¶
Gitea Actions — Recommande pour CI¶
Forces :
- Integration native avec Gitea (SCM du catalogue) — pas de connecteur a configurer
- Compatibilité avec l'ecosysteme GitHub Actions (milliers d'actions réutilisables)
- Runner leger (act runner) deployable en conteneur Podman
- YAML familier pour les équipes habituees a GitHub Actions
- Self-hosted, pas de dependance a un service externe
- Déclencheurs riches (push, PR, cron, dispatch, tag)
Faiblesses :
- Ecosysteme plus jeune que Jenkins ou GitLab CI
- Pas de capacité CD/GitOps native (nécessaire de coupler avec Flux v2)
- Certaines actions GitHub ne sont pas 100% compatibles
- Moins de documentation communautaire que les alternatives
Verdict : choix naturel pour la CI quand Gitea est le SCM. L'integration native elimine la complexité d'un connecteur externe.
Flux v2 (FluxCD) — Recommande pour CD / GitOps¶
Forces :
- CNCF graduated — maturité et gouvernance communautaire prouvees
- Kubernetes-native (CRD GitRepository, Kustomization, HelmRelease)
- Modèle pull : le cluster tire depuis Git, pas de credentials CI dans le cluster
- Reconciliation continue avec detection de drift (
--feature-gates=DetectDrift=true) - Architecture modulaire : source-controller, kustomize-controller, helm-controller, notification-controller
- Multi-tenancy native via isolation par namespace et ServiceAccount
- Image automation intégrée (image-reflector + image-automation controllers) — détection automatique de nouvelles images sans commit CI
- Support natif de SOPS et Sealed Secrets pour le chiffrement des secrets dans Git
- Bootstrap en une commande (
flux bootstrap) — pas de Helm chart a gérer - Empreinte très légère (~200 Mo pour tous les controllers)
- Compatible Helm, Kustomize, manifestes bruts
Faiblesses :
- Ne fait pas de CI (pas de build, pas de test)
- Pas d'UI native (CLI uniquement ; Weave GitOps UI disponible en option)
- Necessite un cluster Kubernetes
- Courbe d'apprentissage pour les concepts GitOps et les CRD Flux
- Debugging parfois moins visuel qu'une UI intégrée
Verdict : standard GitOps CNCF graduated pour Kubernetes. Architecture légère et modulaire, image automation intégrée, multi-tenancy native. Complementaire a Gitea Actions pour la partie CI.
Jenkins — Si pipelines legacy existants¶
Forces :
- Ecosysteme de plugins le plus large (1800+)
- Flexibilite totale (Groovy permet toute logique)
- Maturité (20+ ans, production-ready)
- Supporte tous les environnements (VM, conteneurs, bare metal, cloud)
Faiblesses :
- Architecture monolithique (controller JVM lourd)
- Groovy : langage complexe, difficile a maintenir
- Sécurité : plugins tiers de qualité variable, surface d'attaque large
- UI datee, UX degradee
- Maintenance operationnelle lourde (plugins, upgrades, compatibilité)
Verdict : justifie uniquement si des pipelines Jenkins existants représentent un investissement significatif. Pour un nouveau projet, privilegier Gitea Actions.
GitLab CI — Si GitLab est le SCM¶
Forces :
- Integration native avec GitLab (SCM + CI + CD + registre dans un seul produit)
- YAML intuitif avec includes, templates et composants réutilisables
- Environments et review apps natifs
- Auto DevOps pour des pipelines zero-config
- Documentation exhaustive
Faiblesses :
- Lie a l'ecosysteme GitLab (pas pertinent si Gitea est le SCM)
- Edition Enterprise nécessaire pour certaines fonctionnalités (SAST, DAST, compliance)
- Empreinte mémoire significative (GitLab complet = plusieurs Go de RAM)
- Runner externe a déployer et maintenir
Verdict : excellent si l'organisation utilise GitLab comme SCM. Non pertinent dans notre contexte ou Gitea est le SCM du catalogue.
Tekton — Pour pipelines Kubernetes-natifs¶
Forces :
- 100% Kubernetes-native (CRD Task, Pipeline, PipelineRun)
- Chaque étape est un conteneur isole dans un Pod
- Réutilisable via le Tekton Hub (catalogue de Tasks)
- Pas de serveur central (scalabilité native Kubernetes)
- Fondation CD de la Linux Foundation
Faiblesses :
- Courbe d'apprentissage elevee (abstractions CRD spécifiques)
- Ecosysteme plus restreint que GitHub Actions ou Jenkins
- Verbeux (beaucoup de YAML pour des pipelines simples)
- Peu de documentation hors du contexte OpenShift Pipelines
- Debugging difficile (logs repartis dans les Pods)
Verdict : pertinent si l'équipe est déjà experte Kubernetes et veut un CI/CD 100% CRD. Sinon, la combinaison Gitea Actions + Flux v2 est plus pragmatique.
Matrice de decision¶
graph TD
A{SCM utilise ?} -->|Gitea| B{Besoin GitOps K8s ?}
A -->|GitLab| C[GitLab CI]
A -->|Autre| D{Pipelines Jenkins existants ?}
B -->|Oui| E[Gitea Actions CI + Flux v2 CD]
B -->|Non| F[Gitea Actions CI uniquement]
D -->|Oui, significatifs| G[Jenkins migration progressive]
D -->|Non| E Decision recommandee¶
Pour une DSI utilisant Gitea comme SCM et Kubernetes comme plateforme de déploiement :
Decision ADR
Gitea Actions pour la CI (build, test, scan, push) + Flux v2 pour le CD/GitOps (déploiement, reconciliation, drift detection).
Justification :
- Gitea Actions : integration native avec le SCM, syntaxe GitHub Actions, runner leger
- Flux v2 : projet CNCF graduated, architecture modulaire légère, image automation intégrée, multi-tenancy native
- La separation CI/CD respecte le principe de responsabilité unique
- Pas de credentials du cluster dans le CI (modèle pull Flux)
- Chiffrement natif des secrets dans Git via SOPS
Flux v2 vs ArgoCD — Pourquoi Flux v2¶
| Critère | Flux v2 | ArgoCD |
|---|---|---|
| Statut CNCF | Graduated | Graduated |
| Architecture | Modulaire (controllers indépendants) | Monolithique (server + controller + UI) |
| Empreinte mémoire | ~200 Mo (tous controllers) | ~1,2 Go (server + controller + redis) |
| UI native | Non (CLI ; Weave GitOps en option) | Oui (UI web intégrée) |
| Image automation | Native (image-reflector + automation) | Nécessite Argo Image Updater (addon) |
| Secrets dans Git | SOPS natif, Sealed Secrets | Pas de support natif |
| Multi-tenancy | Native (namespace + ServiceAccount) | AppProject (RBAC propriétaire) |
| Bootstrap | flux bootstrap (une commande) | Helm chart + configuration manuelle |
| Helm support | HelmRelease CRD (natif) | Via source Application |
| Composants indépendants | Oui (activer/désactiver par controller) | Non (tout-en-un) |
| Notifications | notification-controller (Provider + Alert) | argocd-notifications (intégré) |
Le choix de Flux v2 repose sur son architecture légère et modulaire, l'image automation native, le chiffrement SOPS intégré, et la multi-tenancy par namespace qui s'aligne avec le modèle Kubernetes natif.
Alternatives conditionnelles¶
| Condition | Solution alternative | Justification |
|---|---|---|
| SCM = GitLab | GitLab CI | Integration native, pas de connecteur externe |
| Pipelines Jenkins existants significatifs | Jenkins (temporaire) | Migration progressive, pas de big bang |
| Équipe 100% Kubernetes-native | Tekton | CRD natifs, pas de composant hors cluster |
| Pas de Kubernetes | Gitea Actions seul | Deploy via SSH/rsync dans les jobs CI |
| Besoin impératif d'UI web intégrée | ArgoCD | UI native pour les équipes non-CLI |
Critères de reevaluation¶
Cette decision doit etre reevaluee si :
- Gitea Actions atteint des limites fonctionnelles bloquantes (pipelines complexes multi-repo)
- Flux v2 est remplace par un standard GitOps plus largement adopte
- L'organisation migre vers GitLab comme SCM
- Tekton simplifie significativement son modèle d'abstraction
- ArgoCD réduit significativement son empreinte et intègre nativement l'image automation