Вопрос

Я хочу быстро развернуть обновления на сайт, который довольно занят. Для небольших сайтов я бы просто FTP новые файлы над старыми. Этот, однако, имеет несколько крупных DLL, которые регулярно обновляются, и пока они копируют сайт, эффективно вниз (плюс есть хлопот создание их резервных копий в случае, если что-то пойдет не так.

Мой план состоит в том, чтобы использовать TortoiseHg для синхронизации с помощью постановки на сервере на FTP (с использованием Netdrive или что-то подобное). Затем я могу проверить, все работает гладко, и как только это завершено, я хотел бы запустить файл .bat (или что-то еще), который создаст резервную копию живого сайта (желательно только файлы, которые собираются изменить, но это Не критично), а затем скопируйте вновь измененные файлы на живой сайт.

Если возможно, я также хочу иметь копию игнорировать определенные каталоги (например, загрузка пользователей), чтобы он не перезаписал эти файлы на живом сайте?

Я слышал, Robocopy - это путь, но я не уверен, с чего начать. Мне нужно позвонить 2 командам (1 для начальной резервной копии и один для копии)? Есть ли способ восстановить живой сайт до предыдущего состояния, если что-то пойти не так?

Сайт находится в ASP.NET и будет скопирован на сервер Windows 2003.

Редактировать: он становится немного сложно, когда элементы Web.config изменились и должны быть объединены, чтобы настроить параметры постановки постановки (AppSettings, соединительные строки и т. Д.). Как это обрабатывается?

Это было полезно?

Решение

Что мы используем, это следующее

  • Сначала постройте сайт с помощью MSBUILD в CruiseControl.net, чтобы построить двоичные файлы
  • Архив в настоящее время развертываемых файлов под папкой Timestamped, чтобы избежать потери данных в случае проблемы

    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

  • Остановите сайт

  • Разверните веб-сайт, скопировав все, кроме файлов, которые мы заархивировали (/ xd, это исключать каталог)

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

  • Скопируйте и переименуйте (с xcopy, на этот раз) aution.config с правильной информацией в d: webse web.config (на самом деле, вот что мы использовали, теперь у нас есть двигатель преобразования на дому, чтобы изменить частей Dev web.config на лету).

  • Перезагрузите сайт
  • (Необязательно) Удалить архив, который вы сделали на шаге двух

В вашем случае вам придется добавить флаги / XD для любого каталога, который вы хотите игнорировать, например, для загрузки пользователей. И если только производственный файл Web.config не сложен, я бы действительно рекомендую просто копировать Release.config, который вы поддерживаете как часть проекта, бок о бок с Web.config

Другие советы

Робкопия тяжелая потребность? Почему бы не использовать msbuild? Все, что вы указали, могут быть безболезненно сделано в 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')"  />

На NIX на основе серверов я бы использовал rsync, и я понимаю, что на Windows вы можете использовать Deltacopy. Какой порт rsync и - это открытые источники (никогда не использовал deltacopy, поэтому, пожалуйста, проверьте его тщательно), в любом случае, предполагая, что он работает как rsync, то это быстро и только обновляет файлы, которые были изменены.

Вы можете использовать различные параметры конфигурации для удаления файлов на цели, которые были удалены в источнике, и вы также можете использовать добавление в файл, который будет исключать файлы или каталоги, то есть локальный конфиг, вы не хотите копировать. и т. д.

Вы должны иметь возможность сложить все это в один скрипт для запуска при необходимости, что означает, что вы можете проверить и время, чтобы вы знали, что происходит.

Проверьте эти ссылки, чтобы увидеть, помогут ли они:

Вы найдете это robocopy.exe /? чрезвычайно полезно. В частности, вы хотите /XF Переключатель для исключения файлов и /XD для исключения папок.

Вам нужно будет написать скрипт (например, Bat, PowerShell, CScript), чтобы позаботиться о проблемах Web.config.

Сами Microsoft используют Robocopy для развертывания обновлений на некоторых сайтах.

Я не знаю, есть ли у вас несколько серверов, но наш сценарий развертывания пошел что-то вроде: 1) Стоп IIS (который бы взял на сервере из ротации нагрузки, 2) Robocopy / Mir от Poging Path to Webroot к web ## path to webroot, где ## - это номер сервера, 3) Запустить IIS. Это было сделано после того, как сайт был протестирован на выборе.

Это не очень поможет с вашей проблемой конфигурации, но наши конфигурации конфигурации и производства были одинаковыми.

Что вам нужно (и мне нужно) это Синхронизировать программу с возможностью создать резервную копию файлов на сервере и сделайте Быстрая копия на FTP из файлов, на которые, вероятно, скопировав их в первую очередь во временный каталог или частичным обновлением.

Это одна программа, которую я нашел: http://www.superflexible.com/ftp.htm.

WebDeploy - это гораздо лучший способ обрабатывать развертывание (см. Скотт H http://www.hanselman.com/blog/webdeploymentMadeaweSomeiTyouseUsingXCopyouredoingitwrong.aspx.)

Но Robocopy - это отличный недорогой развертывающий инструмент, который я все еще использую на некоторых сайтах (не нашел время, чтобы изменить их в WebDeploy). Robocopy похожа на Xcopy, но с гораздо более богатым набором вариантов. Таким образом, вам понадобится 2 команды Robocopy (1 для резервной копии и 1 для развертывания). Я обычно делаю команду Backup, когда файлы будут построенными.

Управление файлами конфигурации всегда сложно (и большая причина использовать WebDeploy). Один из подходов, состоит в том, чтобы сохранить копию файлов конфигурации для каждой среды, проверенной в вашем исходном управлении (например, Web.dev.config, web.uat.config, web.prod.config и etc). Постановка (или сценарий развертывания) будет захватить и переименовать нужный файл конфигурации.

Вам, вероятно, нужно будет использовать комбинацию инструментов.

Я бы посмотрел на DFSR (роль файловых серверов) с папкой только для чтения на вашем живом сайте (так что это односторонняя репликация).

Очень легко настроить, имеет хороший графический интерфейс, возможность исключить файлы на основе местоположения и / или масок, а с включенной копией тома тень, вы можете запустить его на графиках, которые вы устанавливаете и обновляете эти файлы, которые меняются только (или иметь его Бегите по расписанию или даже запустить его вручную). Красота этого, как только она настроен, вам не нужно снова прикоснуться.

После того, как у вас есть основная часть ваших файлов, реплицирующих, вы можете получить помощь в автоматизации возможного слияния на web.config, предполагая, что вы хотите, чтобы автоматизированные.

Msbuild отлично, кроме одного несовершеннолетнего (или основных в зависимости от вашей точки зрения). Он перестраивает двоичные файлы каждый раз, когда вы запускаете сборку. Это означает, что для развертывания от тестирования к производству или сцену к производству (или что называется вашей предварительной среды), если вы используете MSBuild, вы не продвигаете существующие двоичные файлы из одной среды к следующему, вы их построили Отказ Это также означает, что вы полагаетесь, с уверенностью, что ничего не изменилось в репозитории исходного кода, так как вы сделали MSBuild к вашей предварительной среде. Разрешение даже малейшего шансов на изменение на что-либо, серьезное или второстепенное, означает, что вы не будете продвигать полностью протестированный продукт в вашу производственную среду. В местах я работаю, это не приемлемый риск.

Введите робокопию. С Robocopy вы копируете (надеюсь) полностью протестированный продукт в вашу производственную среду. Затем вы также должны быть вручную изменить ваш Web.config / app.config, чтобы отразить среду производства или использовать инструмент преобразования для этого. Я использовал «Инструмент преобразования конфигурации», доступный на SourceForge для этой цели - он работает так же, как MSBuild Web / App.config преобразования.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top