4

Je souhaite supprimer certaines ressources d'image en fonction de la version que je libère à l'aide de MsDeploy. J'ai trois versions pour différents clients qui sont fondamentalement un autre thème et un grand nombre de transformations de configuration pour configurer leurs environnements correctement.Déploiement Web: exclure les répertoires en fonction du nom de la configuration du projet

Je ne souhaite pas inclure les ressources d'image pour client1 lors du déploiement sur client2.

J'ai utilisé this as a reference pour faire mes premiers pas dans la personnalisation de msdeploy et cela fonctionne bien, mais je n'ai aucune idée de la variable pour obtenir le nom de la configuration.

In pseudo code: 
if $configurationName == "client1" 
    exclude dirs gfx/client2 and gfx/client3 
if $configurationName == "client2" 
    exclude dirs gfx/client1, gfx/client3 
and so on... 

Peut-il même être possible d'exclure tout et d'inclure seulement celui qui est nécessaire?

Répondre

9

J'ai posté une entrée sur mon blog à ce sujet à http://sedodream.com/2010/08/15/WebDeploymentToolMSDeployHowToExcludeFilesFromPackageBasedOnConfiguration.aspx. Voici le résumé:

Vous utilisez la même approche que dans ma réponse précédente, ExcludeFromPackageFiles, mais vous y mettez simplement une condition. Donc, si vous avez des fichiers sous scripts dossier avec « debug » au nom de fichier que vous voulez exclure de tout paquet qui ne se construit pas dans la configuration de débogage la façon dont vous le faites est

<ItemGroup Condition=" '$(Configuration)'!='Debug' "> 
    <ExcludeFromPackageFiles Include="scripts\**\*debug*" /> 
</ItemGroup> 

Plus de détails sur mon blog, mais c'est un mod simple à l'approche précédente.

1

Vous pouvez étendre les exemples de Sayed en utilisant l'attribut Condition sur votre propriété ItemGroup et la propriété $(Configuration).

.: par exemple

<ItemGroup> 
    <Content Include="a.jpeg" Condition=" '$(Configuration)' == 'Client1' " /> 
</ItemGroup> 
5

Merci pour vos réponses. J'ai tout réparé maintenant, j'ai eu beaucoup de mal à inclure une construction et une migration pour ma base de données (migrator.net) mais j'ai triché et je l'ai fait à travers la commande à la place.

Je pensais que je posterais tout mon processus de déploiement ici pour que les gens qui lisent ce post puissent apprendre de toutes mes erreurs. Les étapes de base sont les suivants:

  • Web.config transforme pour vous assurer que tous les paramètres sont corrects pour chacun des clients
  • Sauvegarde des fichiers de serveur Web et base de données sur le serveur de production
  • Exclure tous les répertoires de GFX pour tous clients
  • Inclure le GFX dir qui est recherché par ce client
  • Inclure binares supplémentaires et licence-fichiers qui ne sont pas référencés par le projet correclty
  • Migrate la base de données à la révision actuelle
  • Webdeploy tous les nouveaux fichiers

Déployer.proj, importé par <Import Project="Deploy.csproj" /> à la dernière ligne du fichier de projet ProjetWeb:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <CopyAllFilesToSingleFolderForPackageDependsOn> 
      ExcludeAllGfx; 

      Client1Backup; 
      Client1Include; 
      Client1Migrate; 

      CollectBinFiles; 
      $(CopyAllFilesToSingleFolderForPackageDependsOn); 
     </CopyAllFilesToSingleFolderForPackageDependsOn> 
    </PropertyGroup> 

    <Target Name="ExcludeAllGfx" BeforeTargets="ExcludeFilesFromPackage"> 
     <ItemGroup> 
      <ExcludeFromPackageFiles Include="gfx\client1\**\*.*"> 
       <FromTarget>Project</FromTarget> 
      </ExcludeFromPackageFiles> 
      <ExcludeFromPackageFiles Include="gfx\client2\**\*.*"> 
       <FromTarget>Project</FromTarget> 
      </ExcludeFromPackageFiles> 
      <ExcludeFromPackageFiles Include="gfx\client3\**\*.*"> 
       <FromTarget>Project</FromTarget> 
      </ExcludeFromPackageFiles> 
     </ItemGroup> 
     <Message Text="ExcludeFromPackageFiles: @(ExcludeFromPackageFiles)" Importance="high" /> 
    </Target> 

    <Target Name="CollectBinFiles"> 
     <ItemGroup> 
      <_CustomFiles Include="..\IncludeBin\Telerik\Telerik.ReportViewer.WebForms.dll" /> 
      <_CustomFiles Include="..\IncludeBin\Telerik\Telerik.Reporting.dll" /> 
      <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)"> 
       <DestinationRelativePath>Bin\%(Filename)%(Extension)</DestinationRelativePath> 
      </FilesForPackagingFromProject> 
     </ItemGroup> 
    </Target> 

    <Target Name="Client1Migrate" Condition="'$(Configuration)|$(Platform)' == 'Release Client1|AnyCPU'"> 
     <Exec Command="&quot;..\MigratorProject\Bats\Client1.bat&quot;" ContinueOnError="false" /> 
    </Target> 

    <Target Name="Client1Include" Condition="'$(Configuration)|$(Platform)' == 'Release Client1|AnyCPU'"> 
     <ItemGroup> 
      <_CustomFilesClient1 Include="gfx\Client1\**\*.*" Exclude="gfx\Client1\**\.svn\**\*.*"> 
       <FromTarget>Project</FromTarget> 
      </_CustomFilesClient1> 
      <FilesForPackagingFromProject Include="%(_CustomFilesClient1.Identity)"> 
       <DestinationRelativePath>gfx\client1\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath> 
      </FilesForPackagingFromProject> 
     </ItemGroup> 
    </Target> 

    <Target Name="Client1Backup" Condition="'$(Configuration)|$(Platform)' == 'Release Client1|AnyCPU'"> 
     <Exec Command="&quot;C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe&quot; -verb:sync -source:contentPath=&quot;page of client1&quot;,computerName=http://10.8.1.1/MsDeployAgentService2,encryptPassword=pass -dest:package=c:\Backups\deployments\client1.zip,computerName=http://10.8.1.1/MsDeployAgentService2,encryptPassword=pass" ContinueOnError="false" /> 
     <Exec Command="&quot;C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe&quot; -verb:sync -source:runCommand='C:\Backups\deployments\scripts\backup.cmd client1',waitInterval=20000 -dest:auto,computerName=http://10.8.1.1/MsDeployAgentService2,encryptPassword=pass" ContinueOnError="false" /> 
    </Target> 
</Project> 

Backup.cmd:

@echo off 
sqlcmd -v name=%1 -S . -i "C:\Backups\deployments\scripts\backupdb.sql" 
C:\Backups\deployments\scripts\stampme "C:\Backups\deployments\%1.zip" 

backupdb.sql:

DECLARE @name NVARCHAR(50) -- database name 
DECLARE @path NVARCHAR(256) -- path for backup files 
DECLARE @fileName NVARCHAR(256) -- filename for backup 
DECLARE @fileDate NVARCHAR(20) -- used for file name 

SET @name = '$(name)' 
SET @path = 'C:\Backups\deployments\' 
SELECT @fileDate = REPLACE(REPLACE(CONVERT(VARCHAR(50),GETDATE(),120),':','-'), ' ', '@') 
SET @fileName = @path + @name + '_' + @fileDate + '.BAK' 
BACKUP DATABASE @name TO DISK = @fileName; 

stampme. chauve-souris: http://ss64.com/nt/syntax-stampme.html

J'espère que quelqu'un recevra de l'aide et des exemples de cette entrée.

+0

"Inclure les fichiers binaires et les fichiers de licence supplémentaires qui ne sont pas référencés par la correction du projet" -> il suffit de les ajouter au jeu de projets à copier vers la sortie. – eglasius

+0

Oui, mais les licences sont différentes pour les machines en développement et les serveurs de staging/production, c'est pourquoi je ne les veux même pas dans le projet. – kiteloop