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
:::tip Principe clé 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 title="nuget.config"
:::warning Important
Ce fichier **NE DOIT PAS** contenir de credentials. Il sera commité dans Git.
:::
Committez ce fichier :
```bash
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
:::info Alternative 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 :
1. Vérifiez que les credentials sont bien configurés :
bash
cat ~/.nuget/NuGet/NuGet.Config
2. 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 :
1. Vérifiez l'URL dans votre nuget.config
2. Testez l'accès au repository :
bash
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 :
1. Recherchez les vieux fichiers de config :
bash
find . -name "nuget.config" -o -name "NuGet.Config"
2. Supprimez les doublons et gardez uniquement celui à la racine
3. Vérifiez la config sur les agents :
bash
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