Pipeline CI/CD C# : configuration de zéro pour développeurs pressés

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

CI/CD pour C# : arrêtez de déployer manuellement et passez à l'automatisation

\n\n

Si vous compilez encore votre projet C# en local, transférez vos builds par FTP et croisez les doigts pour que tout fonctionne — j'ai une bonne nouvelle pour vous. En 2025, cette méthode est tout simplement dépassée, même pour un petit projet personnel.

\n\n

Le CI/CD n'est pas une magie réservée aux seniors à 300k, mais simplement un ensemble de scripts qui gèrent les tâches répétitives à votre place. Aujourd'hui, nous allons configurer un pipeline CI/CD complet pour C# à partir de zéro. Sans blabla, avec des exemples concrets et une analyse des erreurs courantes.

\n\n

D'ailleurs, si vous codez en Python, nous avons aussi des guides d'automatisation sur pythonlib.ru. Mais aujourd'hui, on travaille avec C#.

\n\n

Qu'est-ce que le CI/CD et pourquoi en avez-vous besoin en tant que développeur C#

\n\n

CI (Continuous Integration) : chaque commit dans votre Git est automatiquement compilé et testé. Fini les « ça marche chez moi ».

\n\n

CD (Continuous Delivery/Deployment) : après une compilation réussie, le code est automatiquement déployé sur le serveur (ou dans le cloud).

\n\n

Pour C#, c'est particulièrement crucial : la compilation avec dotnet build peut varier d'une machine à l'autre, et les tests sont souvent oubliés. Le CI/CD résout ces deux problèmes.

\n\n

Choisir son outil : GitHub Actions vs GitLab CI vs Jenkins

\n\n

Pour commencer, je recommande GitHub Actions. Pourquoi ?

\n\n
    \n
  • Gratuit pour les dépôts publics (même pour C#)
  • \n
  • Pas besoin d'installer un serveur
  • \n
  • Actions prêtes à l'emploi pour .NET
  • \n
  • YAML — facile à lire
  • \n
\n\n

Si vous utilisez GitLab, le principe est le même, la syntaxe est similaire. Jenkins, on le laisse pour l'enfer corporate.

\n\n

Écrire son premier pipeline pour un projet C#

\n\n

Créez à la racine du dépôt le fichier .github/workflows/dotnet.yml. Oui, le fichier doit être exactement dans ce dossier.

\n\n

Voici un pipeline minimal qui compile le projet et exécute les tests :

\n\n
name: .NET CI\n\non:\n  push:\n    branches: [ main, develop ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  build-and-test:\n    runs-on: ubuntu-latest\n\n    steps:\n    - uses: actions/checkout@v4\n\n    - name: Setup .NET\n      uses: actions/setup-dotnet@v4\n      with:\n        dotnet-version: '8.0.x'\n\n    - name: Restore dependencies\n      run: dotnet restore\n\n    - name: Build\n      run: dotnet build --no-restore --configuration Release\n\n    - name: Run tests\n      run: dotnet test --no-build --configuration Release --verbosity normal
\n\n

Analyse étape par étape :

\n\n
    \n
  • on: push — le pipeline se lance lors d'un push sur main ou develop
  • \n
  • runs-on: ubuntu-latest — on compile sous Linux (C# avec .NET Core/8+ fonctionne partout)
  • \n
  • setup-dotnet — installe la version requise du SDK .NET
  • \n
  • dotnet restore — restaure les packages NuGet
  • \n
  • dotnet build — compile la version Release
  • \n
  • dotnet test — exécute tous les tests du projet
  • \n
\n\n

Après le push, allez dans l'onglet Actions de votre dépôt — vous verrez le pipeline s'exécuter. Si les tests échouent, vous obtiendrez un statut rouge et un email de notification.

\n\n

Ajouter la couverture de code (parce que des tests sans couverture, c'est du vent)

\n\n

Un pipeline digne de ce nom doit montrer le pourcentage de code couvert par les tests. Pour C#, on utilise coverlet avec ReportGenerator.

\n\n

Commencez par ajouter les packages NuGet à votre projet de test :

\n\n
dotnet add YourTestProject.csproj package coverlet.collector\ndotnet add YourTestProject.csproj package coverlet.msbuild
\n\n

Mettez ensuite à jour l'étape de test dans le pipeline :

\n\n
    - name: Run tests with coverage\n      run: |\n        dotnet test --no-build --configuration Release \\\n          /p:CollectCoverage=true \\\n          /p:CoverletOutputFormat=opencover \\\n          /p:CoverletOutput=./TestResults/coverage.xml\n\n    - name: Install ReportGenerator\n      run: dotnet t                

Blogs

Book Recommendations