TFS : Créer un package WebDeploy avec Team Build 2

TFS : Créer un package WebDeploy avec Team Build

Lors de ma session aux TechDays 2013 un lecteur de ce blog m’a posé la question de comment faire pour générer un package WebDeploy depuis Team Build. Voici donc un billet sur ce sujet :)

Avant de commencer sur la génération de package WebDeploy avec Team Build commençons par un bref rappel de ce qu’est WebDeploy :

WebDeploy est un outil permettant de simplifier le déploiement d’application web ou de site web sur des serveurs IIS. Avec WebDeploy un administrateur peut exporter ou importer un site sous forme de package paramétrable ou peut synchroniser des serveurs entre eux.

Dans ce billet je vais vous montrer comment vous pouvez générer un package WebDeploy (.zip) en se basant sur vos sources et le résultat de la compilation de votre application web.

Paramétrage de la solution

La première chose que vous pouvez faire est de paramétrer votre projet Web via ses propriétés :

SNAGHTML367f113

Notez que l’ensemble de ces paramètres pourra être surchargé lors de la build si vous souhaitez centraliser certains paramètres. En effet tous ces paramètres ne sont que des propriétés MsBuild :)

Mise en place d’une définition de build

Avant toute chose il faut créer une définition de build en se basant sur le template par défaut et configuré pour compiler votre solution contenant l’application Web :

SNAGHTML382aac1

Si vous lancez une build sans autre paramétrage vous devriez obtenir en sortie de build un répertoire _PublishedWebSite contenant votre application Web :

SNAGHTML384d26d

Afin de créer le package WebDeploy nous allons devoir passer des valeurs spécifiques pour des propriétés MsBuild utilisées par la targets de déploiement Web Microsoft.Web.Publishing.targets. Voici les propriétés que nous allons surcharger :

  • DeployOnBuild : booléen indiquant s’il faut déployer en même temps que l’on build l’application Web.
  • DeployTarget : indique le type d’action de déploiement à réaliser.
  • DefaultPackageFileName : le nom du fichier créés pour la package WebDeploy.

Le premier paramètre permet d’indiquer si l’on souhaite lancer le pipeline de déploiement des applications Web référencées par la solution que l’on compile. Par défaut ce paramètre vaut false, il va donc falloir lui passer la valeur true.

Le paramètre DeployTarget permet de spécifier l’action que l’on souhaite réaliser lors du déploiement. Lors d’un déploiement il est possible de réaliser plusieurs type actions (création d’un package ou déploiement), ce qui nous intéresse comme action est la création d’un package WebDeploy. Pour cela il faut utiliser la valeur Package qui se trouve être la valeur par défaut. Donc pas besoin de spécifier une valeur particulière :)

Enfin le dernier paramètre permet de spécifier, dans le cas de l’exécution depuis TeamBuild le nom du fichier généré. Ce nom est normalement spécifié dans les propriétés du projet mais dans le cas de TeamBuild le nom personnalisé n’est pas utilisé et est remplacé par le nom du projet :

SNAGHTML39370be

Nous allons pouvoir utiliser la propriété DefaultPackageFileName afin de surcharger cette valeur :

SNAGHTML39d0f2f

Maintenant que nous connaissons les propriétés MsBuild à surcharger nous pouvons mettre à jour notre définition de build pour inclure ces éléments. Tous cela se passe via le paramètre “MsBuild Arguments” dans la section avancée en utilisant la syntaxe MsBuild en ligne de commande “/p:DeployOnBuild=true;DefaultPackageFileName=WygwamTechDays.zip” :

SNAGHTML39fe5a0

Et voila votre build va maintenant générer en plus un package WebDeploy avec le nom que vous lui avez spécifié. Ce package se trouvera dans un sous répertoire de _PublishedWebSites :

SNAGHTML3a223e7

Si vous trouvez l’utilisation des paramètres MsBuild un peu fastidieux, rien ne vous empêche de personnaliser votre template de build afin d’y ajouter des paramètres tel que “Create WebDeploy Package” et “WebDeploy Package Name” et d’utiliser ces valeurs pour passer ou nom des paramètres à l’activité MsBuild. Dans ce cas notez que l’activité MsBuild possède déjà un paramètre DeployOnBuild pour simplifier encore :)

Utilisation des profiles de publication

Depuis Visual Studio 2012 il est maintenant possible de créer des profiles de publication (fichier .pubxml). Ces fichiers contiennent le paramètrage WebDeploy à utiliser. Vous pouvez facilement créer ou utiliser ces profiles depuis Visual Studio en faisant un clic droit sur un projet et en sélectionnant Publish :

SNAGHTML3a852b4

Vous pourrez alors créer ou utliser un profile de publication :

SNAGHTML3a9b9df

Une fois vos différents profile créés et mis dans le contrôleur de sources, pour les utiliser via MsBuild il faut utiliser le paramètre PublishProfile. Ce paramètre permet de spécifier le nom du fichier profile à utiliser (sans le .pubxml) : /p:PublishProfile=Dev

Comme pour les autres paramètres on va spécifier cette valeur via l’argument “MsBuild Arguments” :

SNAGHTML3ad6ead

Et voila vous avez maintenant les informations nécessaires pour générer des packages WebDeploy depuis Team Foundation Build :)

Carpe Diem.

2 thoughts on “TFS : Créer un package WebDeploy avec Team Build

  1. Reply ismael jan 30,2015 11:46

    Hello,

    First , thanks for your great article .

    I followed your procedure to create a web packafe after my tfs build but it seems that my command arguments are not executed by the build server .

    I have created a web package deploy , checked in and no package is created .

    Do you specify any targets in your web project file ?

    Thanks

    Any idea ?

  2. Reply Guillaume Rouchon avr 28,2015 16:57

    Hi,
    Verify that you have the « Microsoft.WebApplication.targets » import at the end of your project file. This is the target which use the build parameters DeployOnBuild…

Leave a Reply

  

  

  

CAPTCHA *