Aller au contenu principal

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
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 :

RepositoryURLUsage
nexus-prereleasehttps://nexus.homelab.j-it.be/repository/nuget-prerelease/Packages en développement, versions beta
nexus-releaseshttps://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 :

nuget.config
<?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>
Important

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
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 :
    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 :
    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 :
    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 :
    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.config template (disponible dans /static/templates/nuget.config)
  • Ajouter **/NuGet.Config au .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 restore en local
  • Créer le pipeline Azure DevOps (voir guide pipelines)
  • Lancer un premier build pour valider

🔗 Voir aussi