Configuration NuGet avec Nexus
Guide complet pour configurer NuGet avec notre serveur Nexus privé.
📋 Vue d'ensemble
Notre stratégie de configuration NuGet suit une approche de sécurité par séparation :
- Repository Git : Contient les sources NuGet sans credentials
- Machines locales : Stockent les credentials dans
~/.nuget/NuGet/NuGet.Config - Dotnet CLI : Merge automatiquement les deux configurations
Les credentials ne sont JAMAIS committés dans Git. Ils sont configurés localement sur chaque machine.
🏗️ Architecture Nexus
Nous utilisons deux repositories Nexus :
| Repository | URL | Usage |
|---|---|---|
nexus-prerelease | https://nexus.homelab.j-it.be/repository/nuget-prerelease/ | Packages en développement, versions beta |
nexus-releases | https://nexus.homelab.j-it.be/repository/nuget-releases/ | Packages de production, versions stables |
🚀 Configuration initiale
Étape 1 : Configuration du projet (à faire une fois par projet)
Créez un fichier nuget.config à la racine de votre repository :
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
<add key="nexus-prerelease" value="https://nexus.homelab.j-it.be/repository/nuget-prerelease/index.json" />
<add key="nexus-releases" value="https://nexus.homelab.j-it.be/repository/nuget-releases/index.json" />
</packageSources>
</configuration>
Ce fichier NE DOIT PAS contenir de credentials. Il sera commité dans Git.
Committez ce fichier :
git add nuget.config
git commit -m "Add NuGet configuration"
git push
Étape 2 : Configuration des credentials (à faire une fois par machine)
Sur chaque poste de développement et chaque agent Azure DevOps, configurez vos credentials :
# Ajouter les credentials pour nexus-prerelease
dotnet nuget add source https://nexus.homelab.j-it.be/repository/nuget-prerelease/index.json \
--name nexus-prerelease \
--username VOTRE_USERNAME \
--password VOTRE_PASSWORD \
--store-password-in-clear-text
# Ajouter les credentials pour nexus-releases
dotnet nuget add source https://nexus.homelab.j-it.be/repository/nuget-releases/index.json \
--name nexus-releases \
--username VOTRE_USERNAME \
--password VOTRE_PASSWORD \
--store-password-in-clear-text
Vous pouvez aussi utiliser notre script automatisé :
./scripts/dotnet/setup-nuget-credentials.sh
Étape 3 : Vérification
Vérifiez que tout est correctement configuré :
dotnet nuget list source
Vous devriez voir :
Registered Sources:
1. nuget.org [Enabled]
https://api.nuget.org/v3/index.json
2. nexus-prerelease [Enabled]
https://nexus.homelab.j-it.be/repository/nuget-prerelease/index.json
3. nexus-releases [Enabled]
https://nexus.homelab.j-it.be/repository/nuget-releases/index.json
🔧 Configuration des agents Azure DevOps
Méthode manuelle
Sur chaque agent, en SSH :
ssh azureuser@agent-ip
# Puis exécuter les commandes de l'étape 2
Méthode automatisée (Ansible)
Utilisez le playbook fourni pour configurer tous vos agents en une seule commande :
ansible-playbook scripts/ansible/configure-nuget-agents.yml
Le playbook vous demandera vos credentials Nexus et les configurera sur tous les agents.
📂 Emplacement des fichiers de configuration
Windows
- Utilisateur :
%APPDATA%\NuGet\NuGet.Config - Machine :
%ProgramData%\NuGet\Config\
Linux / macOS
- Utilisateur :
~/.nuget/NuGet/NuGet.Config - Machine :
/etc/nuget/NuGet.Config
🐛 Troubleshooting
Erreur 401 (Unauthorized)
Symptôme :
Error NU1301: Unable to load the service index for source https://nexus.homelab.j-it.be/...
Response status code does not indicate success: 401 (Unauthorized).
Cause : Credentials manquants ou incorrects.
Solution :
- Vérifiez que les credentials sont bien configurés :
cat ~/.nuget/NuGet/NuGet.Config - Reconfigurez les credentials si nécessaire (voir Étape 2)
Erreur 404 (Not Found)
Symptôme :
Error NU1301: Unable to load the service index for source https://nexus.homelab.j-it.be/...
Response status code does not indicate success: 404 (Not Found).
Cause : URL incorrecte ou repository inexistant dans Nexus.
Solution :
- Vérifiez l'URL dans votre
nuget.config - Testez l'accès au repository :
curl -I https://nexus.homelab.j-it.be/repository/nuget-prerelease/index.json
Le pipeline Azure DevOps utilise une mauvaise source
Cause : Ancien fichier nuget.config dans le repo ou configuration obsolète sur les agents.
Solution :
- Recherchez les vieux fichiers de config :
find . -name "nuget.config" -o -name "NuGet.Config" - Supprimez les doublons et gardez uniquement celui à la racine
- Vérifiez la config sur les agents :
ssh azureuser@agent-ip "dotnet nuget list source"
Packages non trouvés alors que la config semble correcte
Cause : Cache NuGet corrompu.
Solution :
# Nettoyer le cache
dotnet nuget locals all --clear
# Réessayer le restore
dotnet restore
📝 Checklist nouveau projet
Utilisez cette checklist à chaque nouveau projet .NET :
- Copier le fichier
nuget.configtemplate (disponible dans/static/templates/nuget.config) - Ajouter
**/NuGet.Configau.gitignore(pour éviter de committer les credentials) - Configurer les credentials sur votre poste de dev
- Si vous avez des nouveaux agents : configurer les credentials avec Ansible
- Tester
dotnet restoreen local - Créer le pipeline Azure DevOps (voir guide pipelines)
- Lancer un premier build pour valider