Uncategorized

Nuget package restore of Hell & AppHarbor

Le cloud c’est bien, mais c’est toujours mieux de programmer un projet de manière multi-plateforme (et j’entends par là la possibilité de le déployer sur différents fournisseurs de services) puisque ça permet de ne pas être tributaire, et donc prisonnier, du fournisseur choisi en premier lieu.

C’est pourquoi, en plus du support d’Azure Websites (dont la facilité d’utilisation est le plus grand atout) j’ai tenté pour mon projet en cours de supporter également AppHarbor. Il s’agit d’une plateforme d’hébergement cloud PaaS (qui utilise des instances AWS en sous-main) qui se veut le Heroku du monde .net et qui a la particularité de faire aussi aussi de service de build et de travailler avec les sources du projet.

Pour déployer un projet sur AppHarbor, on peut configurer ce dernier pour chercher automatiquement du code sur quelques plateformes de suivit de version (GitHub est notamment supporté) ou pusher ses sources sur le repository git AppHarbor associé à votre application et à votre compte.

À chaque commit, MSBuild est lancée sur le code de la solution et l’application Web résultante est hébergée. Enfin ça c’est la théorie, puisqu’en informatique on a toujours…
 

 

DES EMMERDES.

 

 

Voilà c’est dit. Détaillons un petit peu.

Spécifier une source Nuget à MSBUild

Si vous utilisez des packages Nuget dans votre projet, le processus de build de AppHarbor va tout d’abord exécuter la commande nuget restore afin de chercher les paquets manquants. Si vous avez lu mon billet précédent, vous avez vu que mon projet utilise un flux nuget « privé ». La source de ces packages à été spécifiée pour Visual Studio, mais l’information n’est pas stockée dans un des fichiers du projet.

Il faut donc la spécifier à un endroit utilisable par le processus de build utilisé par AppHarbor. C’est là qu’intervient le fichier nuget.config. Fichier xml dont il n’y a pas besoin habituellement pour se servir de nuget, celui-ci permet de configurer quelques aspects de nuget. Notamment les URL des flux Nuget à utiliser.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="mypackages" value="http://exemple.azurewebsites.net/nuget/" />
  </packageSources>
 <packageRestore>
     <add key="enabled" value="true" />
 </packageRestore>
</configuration>

Dans l’exemple de fichier ci-dessus on voit que la seconde RUL pointe vers le dépôt privé. Comme la configuration réécrit (?) la liste des sources, on précise également la source principale des paquets nuget publics : nuget.org.

La seconde section du fichier (packageRestore) indique que les packages doivent être restaurés. Sur AppHarbor, il n’y en a priori pas besoin.

Notez que cette source additionnelle est également ajoutée à l’interface de Visual Studio dans l’outil graphique du gestionnaire de paquets mais aussi dans sa version en ligne de commande.

Avec .gitignore, c’est mieux !

L’autre point sensible, c’est que la restauration des paquets nuget peut être perturbée par leur présence dans le logiciel de gestion de version. Si comme moi vous avez converti un projet TFS en projet Git (ou juste pas fait attention), il a peut-être de tels paquets qui se baladent et qui empêcherons une restauration propre. Je vous conseille d’ajouter à votre fichier .gitignore les lignes suivantes, comme conseillé dans la documentation.

# Ignore NuGet Packages
*.nupkg
# Ignore the packages folder
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config

Dernier conseil

À moins d’être un boss de Git, de MSBuild et de Nuget, utilisez la structure par défaut d’une solution Visual Studio pour héberger votre projet sur AppHarbor, ça vous évitera de vous prendre la tête pour faire marcher le tout. 😉

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s