Voici un tutoriel complet intégrant l'ensemble des étapes suivantes, le tout en utilisant .NET 8 :
- Mise en place d’un dépôt NuGet local (BaGet) via Docker Compose et VSCode.
- Création d’un projet .NET 8 consommant des packages via le dépôt local.
- Publication d’un package NuGet depuis une bibliothèque .NET 8.
- Intégration d’un pipeline CI/CD avec Jenkins, qui exécute les étapes de compilation dans un conteneur Docker (image SDK .NET 8).
Chaque section ci-dessous détaille les tâches de développement et fournit le code nécessaire.
1. Déploiement du dépôt NuGet local avec BaGet (Docker Compose)
Tâches
- Créer un dossier de projet (ex.
nuget-depot) dans VSCode. - Ajouter un fichier
docker-compose.ymlà la racine. - Configurer le dépôt pour qu’il soit accessible via l’IP 1.1.1.1 en local et persister les données.
Fichier docker-compose.yml (Méthode B – réseau Docker personnalisé)
version: "3.8"
services:
nuget:
image: loic-sharma/baget:latest
container_name: nuget-server
ports:
- "80:80" # Publication du port 80 de la machine hôte
volumes:
- ./baget-data:/var/baget/data
networks:
nuget-net:
ipv4_address: 1.1.1.1
networks:
nuget-net:
driver: bridge
ipam:
config:
- subnet: "1.1.1.0/24"
Remarque :
- La configuration ci-dessus assigne l’IP 1.1.1.1 au conteneur dans le réseau isolé.
- Pour accéder au dépôt via l’URL
http://1.1.1.1, vérifiez que votre environnement de test permet le routage vers ce sous-réseau.
2. Création d’un projet consommateur (.NET 8) sous VSCode
Tâches
- Créer un projet console ciblant .NET 8.
- Configurer le fichier
NuGet.configpour référencer le dépôt local.
Création du projet
Dans VSCode, dans le terminal, exécutez :
dotnet new console -f net8.0
Cela génère par exemple un fichier Program.cs et un projet (ex. MyConsoleApp.csproj).
Fichier NuGet.config
À la racine du projet, créez le fichier suivant :
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<!-- Dépôt NuGet local BaGet -->
<add key="LocalNuGet" value="http://1.1.1.1/v3/index.json" />
<!-- Source officielle (optionnel) -->
<add key="NuGet.org" value="https://api.nuget.org/v3/index.json" />
</packageSources>
</configuration>
Ajout d’un package
Exemple : Pour ajouter un package existant (ex. Newtonsoft.Json), lancez :
dotnet add package Newtonsoft.Json
La commande met à jour le fichier .csproj avec la référence suivante :
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>
Vous pouvez également ajouter un package publié dans votre dépôt local (ex.
MyLocalLibrary) en indiquant la source si besoin :dotnet add package MyLocalLibrary --version 1.0.0 --source http://1.1.1.1/v3/index.json
3. Publication d’un package NuGet depuis une bibliothèque (.NET 8) sous VSCode
Tâches
- Créer un projet de bibliothèque ciblant .NET 8.
- Configurer les métadonnées dans le fichier projet pour la génération du package.
- Packager la bibliothèque et publier le package sur le dépôt NuGet local.
Création du projet de bibliothèque
Dans VSCode, exécutez :
dotnet new classlib -n MyLibrary -f net8.0
Configuration du fichier MyLibrary.csproj
Modifiez-le pour y ajouter les métadonnées nécessaires :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<!-- Génération automatique du package lors du build (optionnel) -->
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<!-- Métadonnées du package -->
<PackageId>MyLibrary</PackageId>
<Version>1.0.0</Version>
<Authors>VotreNom</Authors>
<Description>Ma première bibliothèque NuGet publiée via .NET 8.</Description>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<RepositoryUrl>https://votre.repo.git</RepositoryUrl>
</PropertyGroup>
</Project>
Génération du package
Positionnez-vous dans le dossier du projet et lancez :
cd MyLibrary
dotnet pack -c Release -o ./nupkg
Le package MyLibrary.1.0.0.nupkg sera généré dans le dossier ./nupkg.
Publication du package sur BaGet
Utilisez la commande suivante pour publier :
dotnet nuget push ./nupkg/MyLibrary.1.0.0.nupkg --source http://1.1.1.1/v3/index.json --skip-duplicate --api-key anyvalue
Remarque :
L’option--api-keyest requise par la CLI, même si BaGet n’impose pas une authentification stricte par défaut.
4. Intégration CI/CD avec Jenkins en utilisant un conteneur Docker (.NET 8)
Tâches
- Créer un fichier
Jenkinsfileà la racine du projet (celui de la bibliothèque ou de la solution). - Utiliser un agent Docker basé sur l’image mcr.microsoft.com/dotnet/sdk:8.0 pour exécuter les étapes de compilation, pack et publication.
- Exécuter les étapes : Checkout, Restore, Build, Pack, Publish.
Exemple de Jenkinsfile
Créez un fichier nommé Jenkinsfile et insérez-y le contenu suivant :
pipeline {
agent {
docker {
image 'mcr.microsoft.com/dotnet/sdk:8.0'
// Optionnel : ajuster les permissions si nécessaire
args '-u root:root'
}
}
environment {
// URL du dépôt NuGet local
NUGET_SOURCE = "http://1.1.1.1/v3/index.json"
// Valeur arbitraire pour l'API key (à sécuriser en production)
NUGET_API_KEY = "anyvalue"
}
stages {
stage('Checkout') {
steps {
// Commande générique pour récupérer le code source
checkout scm
}
}
stage('Restore') {
steps {
sh 'dotnet restore'
}
}
stage('Build') {
steps {
sh 'dotnet build -c Release'
}
}
stage('Pack') {
steps {
// Packager la bibliothèque ; le fichier .csproj doit contenir les métadonnées
sh 'dotnet pack -c Release -o ./nupkg'
}
}
stage('Publish') {
steps {
// Publication du package sur le dépôt NuGet local
sh 'dotnet nuget push ./nupkg/*.nupkg --source $NUGET_SOURCE --skip-duplicate --api-key $NUGET_API_KEY'
}
}
}
post {
success {
echo 'Pipeline CI/CD terminée avec succès.'
}
failure {
echo 'Échec de la pipeline CI/CD. Vérifiez les logs pour plus de détails.'
}
}
}
Explications :
- Agent Docker : La pipeline s’exécute dans un conteneur basé sur le SDK .NET 8, garantissant ainsi l’uniformité de l’environnement de compilation.
- Stages :
- Checkout utilise
checkout scmpour récupérer le code source depuis un dépôt Git (compatible Gitea ou autre).- Restore, Build, Pack et Publish utilisent la CLI .NET pour automatiser le processus de génération et de déploiement.
- Variables d’environnement : Centralisent la configuration de la source NuGet et de l’API key.
- Vous pouvez adapter ce Jenkinsfile pour intégrer des tests unitaires ou d’autres étapes si besoin.
5. Intégration complète dans l’environnement VSCode et Git
Actions à réaliser dans VSCode
-
Dépôt NuGet local et docker-compose
- Créez un dossier (ex.
nuget-depot) et ajoutez-y le fichierdocker-compose.yml. - Dans le terminal intégré, lancez :
docker-compose up -d - Vérifiez l’accessibilité du service via un navigateur en accédant à
http://1.1.1.1.
- Créez un dossier (ex.
-
Projet consommateur et publication
- Créez votre projet consommateur et/ou votre projet de bibliothèque (en .NET 8) comme détaillé ci-dessus.
- Ajoutez le fichier
NuGet.configà la racine du projet pour pointer vers le dépôt local. - Testez l’ajout et l’utilisation de packages dans votre code.
-
Publication et CI/CD
- Intégrez le
Jenkinsfiledans votre projet. - Utilisez Git pour versionner et pousser vos modifications (commande générique) :
git add . git commit -m "Ajout du Jenkinsfile et configuration .NET 8" git push - Configurez Jenkins pour surveiller votre dépôt Git (via webhook ou polling) et déclencher la pipeline lors d’un push.
- Intégrez le
Ressources et références
- .NET 8 SDK : Documentation .NET
- BaGet Documentation : BaGet Docs
- Docker Compose : Docker Compose Documentation
- Jenkins Pipeline Syntax : Jenkins Pipeline Syntax
- Git Basics : Pro Git Book