Question

Je veux être en mesure de déployer rapidement les mises à jour sur un site qui est assez occupé. Pour les plus petits sites, je voudrais juste FTP les nouveaux fichiers sur les anciens. Celui-ci, cependant, a quelques grands dll qui obtiennent régulièrement mis à jour et pendant qu'ils copient le site est effectivement vers le bas (plus il y a les tracas de faire des sauvegardes d'entre eux en cas de problème.

Mon plan est d'utiliser TortoiseHg pour se synchroniser avec une copie de la mise en scène sur le serveur via FTP (en utilisant NetDrive ou quelque chose de similaire). Je peux alors vérifier tout fonctionne en douceur et une fois que est terminée, je voudrais lancer un fichier .bat (ou autre) qui créera une sauvegarde du site en direct (de préférence uniquement les fichiers qui sont sur le point de changer, mais c'est pas critique) puis copiez les nouveaux fichiers modifiés sur le site en direct.

Si possible, je veux aussi avoir la copie ignorer certains répertoires (comme utilisateur télécharge) afin qu'il ne remplacera pas ces fichiers sur le site en direct?

J'ai entendu RoboCopy est le chemin à parcourir, mais je ne suis pas sûr de l'endroit où commencer. Est-ce que je dois appeler 2 commandes (1 pour la sauvegarde initiale et un pour la copie)? Est-il possible de restaurer le site en direct à son état précédent devrait quelque chose de mal à aller?

Le site est en ASP.NET et sera copié sur le serveur Windows 2003.

EDIT: Il est un peu délicat lorsque les éléments web.config ont changé et doivent être fusionnés pour que les paramètres des serveurs de stockage intermédiaire (de appSettings, chaînes de connexion, etc.) ne sont pas déployées sur le site en direct. Comment est-ce que get géré?

Était-ce utile?

La solution

Ce que nous utilisons est le suivant

  • d'abord construire le site avec msbuild en cruisecontrol.net pour construire les binaires
  • archiver les fichiers actuellement déployés dans le cadre d'un dossier horodatées pour éviter de perdre des données en cas de problème

    C:\DevTools\Robocopy\robocopy.exe /R:1 /W:10 /mir "D:\WebSite\Files" "D:\Webarchive\ArchivedFiles\Documents.%date:~0,-8%.%date:~3,-5%.%date:~6%.%time:~0,-9%.%time:~3,-6%.%time:~6,-3%" /XF *.scc

  • arrêter le site

  • déployer le site en copiant tout sauf les fichiers que nous archivés (/ XD est excluez Directory)

    C:\DevTools\Robocopy\robocopy.exe /R:1 /W:10 /mir "c:\dev\site" "D:\WebSite" /XF *.scc /XD "D:\WebSite\Files"

  • copier renommage (avec xcopy, cette fois-ci) une Release.config des informations correctes à d: \ site \ web.config (en fait, c'est ce que nous avions l'habitude de le faire, nous avons maintenant un moteur de transformation de homebrew de changer les parties du dev web.config à la volée).

  • redémarrer le site
  • (en option) supprimer l'archive que vous avez fait à l'étape deux

Dans votre cas, vous devrez ajouter les drapeaux / XD pour un répertoire que vous voulez ignorer, comme le téléchargement des utilisateurs. Et à moins que le fichier web.config de production est compliquée, je vous recommande vraiment copier simplement un Release.config que vous maintenez comme une partie du projet, côte à côte avec le web.config

Autres conseils

est Robocopy une exigence difficile? Pourquoi ne pas utiliser MSBuild? Tout ce que vous avez inscrit peut se faire sans douleur dans MSBuild.

<!-- Attempt to build new code -->
<MSBuild Projects="$(BuildRootPath)\ThePhotoProject.sln" Properties="Configuration=$(Environment);WebProjectOutputDir=$(OutputFolder);OutDir=$(WebProjectOutputDir)\" />

<!-- Get temp file references -->
<PropertyGroup>
  <TempConfigFile>$([System.IO.Path]::GetTempFileName())</TempConfigFile>
  <TempEnvironmentFile>$([System.IO.Path]::GetTempFileName())</TempEnvironmentFile>
</PropertyGroup>

<!-- Copy current web configs to temp files -->
<Copy SourceFiles="$(OutputFolder)\web.config" DestinationFiles="$(TempConfigFile)"></Copy>
<Copy SourceFiles="$(OutputFolder)\web.$(Environment).config" DestinationFiles="$(TempEnvironmentFile)"></Copy>
<ItemGroup>
  <DeleteConfigs Include="$(OutputFolder)\*.config" />
</ItemGroup>

<Delete Files="@(DeleteConfigs)" />

...

<!-- Copy app_offline file -->
<Copy SourceFiles="$(CCNetWorkingDirectory)\Builder\app_offline.htm"  DestinationFiles="$(DeployPath)\app_offline.htm"  Condition="Exists('$(CCNetWorkingDirectory)\Builder\app_offline.htm')"  />

<ItemGroup>
  <DeleteExisting Include="$(DeployPath)\**\*.*" Exclude="$(DeployPath)\app_offline.htm" />      
</ItemGroup>

<!-- Delete Existing files from site -->
<Delete Files="@(DeleteExisting)"  />
<ItemGroup>
  <DeployFiles Include="$(OutputFolder)\**\*.*" />
</ItemGroup>

<!-- Deploy new files to deployment folder. -->
<Copy SourceFiles="@(DeployFiles)"  DestinationFiles="@(DeployFiles->'$(DeployPath)\%(RecursiveDir)%(Filename)%(Extension)')"  />

<!-- Delete app_offline file -->
<Delete Files="$(DeployPath)\app_offline.htm" Condition="Exists('$(DeployPath)\app_offline.htm')"  />

serveurs sur Nix j'utiliser rsync et je comprends que sous Windows, vous pouvez utiliser DeltaCopy laquelle un port de RSYNC et sources ouvertes (jamais utilisé DeltaCopy donc s'il vous plaît vérifier attentivement) Quoi qu'il en soit en supposant qu'il fonctionne comme rsync alors il est rapide et met à jour uniquement les fichiers qui ont été modifiés.

Vous pouvez utiliser différentes options de configuration pour supprimer des fichiers sur la cible qui ont été supprimés sur la source et vous pouvez également utiliser un module complémentaire dans un fichier qui exclura les fichiers ou répertoires, à savoir la configuration locale, vous ne voulez pas copier. etc.

Vous devriez être capable de plier tout à exécuter lorsque nécessaire, ce qui signifie que vous pouvez tester et de temps dans un seul script si vous savez ce qui se passe.

Consultez ces liens pour voir si elles l'aide:

Vous verrez que robocopy.exe /? est extrêmement utile. En particulier, vous voulez que le commutateur /XF pour exclure les fichiers et /XD pour exclure les dossiers.

Vous devez écrire un script (par exemple chauve-souris, Powershell, cscript) pour prendre soin des questions web.config cependant.

Microsoft utilisent eux-mêmes robocopy pour déployer des mises à jour à certains sites.

Je ne sais pas si vous avez plusieurs serveurs, mais notre script de déploiement est allé quelque chose comme: 1) Arrêtez IIS (qui prendrait le serveur de rotation équilibreur de charge, 2) RoboCopy / MIR de \ staging \ chemin \ à \ Webroot \ WEB ## \ chemin \ vers \ Webroot où ## est le numéro du serveur, 3) IIS Démarrer. Cela a été fait après que le site a été testé sans fumée sur le serveur de mise en scène.

Cela ne nous aide pas beaucoup à votre problème de configuration, mais nos fichiers de mise en scène et configuration de production sont les mêmes.

Qu'est-ce que vous avez besoin (et j'ai besoin) est un programme de synchronisation avec la capacité à créer une sauvegarde des fichiers sur le serveur, et faire copie rapide sur ftp des fichiers à ceux en les copiant probablement d'abord dans un répertoire temporaire, ou par la mise à jour partielle.

Ceci est un programme que j'ai trouvé: http://www.superflexible.com/ftp.htm

WebDeploy est une bien meilleure façon de gérer Déploie (voir Scott H http: // www. hanselman.com/blog/WebDeploymentMadeAwesomeIfYoureUsingXCopyYoureDoingItWrong.aspx )

Mais, Robocopy est un excellent outil de déploiement à faible coût que je l'utilise encore sur certains sites (ont pas trouvé le temps de les changer à webdeploy). Robocopy est comme xcopy mais avec un ensemble beaucoup plus riche d'options. Donc, vous auriez besoin de 2 commandes Robocopy (1 pour la sauvegarde et 1 pour Deploy). Je fais normalement la commande de sauvegarde lorsque les fichiers sont mis en scène.

Gestion des fichiers de configuration est toujours délicat (et une grande raison d'utiliser webdeploy). Une approche, est de garder une copie des fichiers de configuration pour chaque environnement contrôlé dans le contrôle de votre source (par exemple, web.dev.config, web.uat.config, web.prod.config, etc.). La mise en scène (ou script deploy) saisirait et renommer le fichier de configuration nécessaire.

Vous auriez probablement besoin d'utiliser une combinaison d'outils.

Je jeter un oeil à DFSR (rôle de serveur de fichiers) avec une lecture seule dossier sur votre site en direct (il est donc réplication à sens unique).

Il est très facile à configurer, a une interface graphique agréable, possibilité d'exclure des fichiers basés sur la localisation et / ou des masques, et Volume Shadow Copy activé, vous pouvez l'avoir en cours d'exécution sur les horaires que vous définissez et mettre à jour les fichiers que le changement ne ( ou le faire tourner sur un programme, ou même exécuter manuellement). La beauté de cela est une fois qu'il est configuré, vous ne devez pas toucher à nouveau.

Une fois que vous avez l'essentiel de vos fichiers, vous pouvez ensuite répliquer obtenir de l'aide dans l'automatisation de la fusion possible sur web.config, en supposant que vous voulez automatisé.

MSBuild est grande, à l'exception d'un défaut mineur (ou majeur selon votre point de vue). Il reconstitue les binaires à chaque fois que vous exécutez une construction. Cela signifie, pour le déploiement de l'essai à la production, ou le stade de la production (ou quel que soit votre environnement de pré-production est appelé), si vous utilisez MSBuild, vous n'êtes pas la promotion des binaires d'un environnement à l'autre, vous les re-construire . Cela a également des moyens que vous fondez, avec certitude, que rien n'a changé dans le référentiel de code source puisque vous avez fait un MSBuild à votre environnement de pré-production. Permettre la moindre chance d'un changement à quoi que ce soit, majeur ou mineur, des moyens vous ne serez pas promouvoir un produit entièrement testé dans votre environnement de production. Dans les endroits où je travaille, ce n'est pas un risque acceptable.

Entrez Robocopy. Avec Robocopy, vous copiez un (je l'espère) produit entièrement testé pour votre environnement de production. Alors vous devez soit modifier manuellement votre web.config / app.config pour refléter l'environnement de production, ou utiliser un outil de transformation pour le faire. J'utilise la « configuration Transformation Tool » disponible sur SourceForge à cette fin - il fonctionne exactement comme les transformations web / app.config MSBuild.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top