Aller au contenu

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