Инструменты развертывания: получите список действий, которые инструмент выполнит без выполнения сценария развертывания. - PullRequest
0 голосов
/ 12 февраля 2010

Мы находимся в процессе оценки MSBuild и Nant для развертываний. Мы можем свернуть наш собственный инструмент. Одна вещь, которую другое подразделение - давайте назовем это DeptA - действительно хотела бы иметь (как это было бы лучше), это способность кого-то в DeptA прочитать сценарий и посмотреть, что он будет делать. В настоящее время мы делаем это с файлами .bat. Мы ненавидим файлы летучих мышей. Противные противные файлы летучей мыши. Но если мы попросим DeptA выучить новый язык сценариев (nant, msbuild), они могут оказаться невосприимчивыми.

В идеале выбранный инструмент сборки мог бы выкинуть список действий, ничего не делая. По линиям:

  • Остановить службу ABC на сервере Z
  • Остановить службу DEF на сервере Z
  • Копировать все файлы из \ server \ dirA \ dirB to \ server2 \ dirC
  • Запуск службы ABC на сервере Z
  • Запуск службы DEF на сервере Z
  • Запустить все скрипты в директории \ Сервер \ Dira \ DIRC

Возможно ли это сделать с помощью MSBuild? NAnt? Без меня переучивать XSL?

1 Ответ

1 голос
/ 12 февраля 2010

Если бы я был тобой, я бы на самом деле смешал MSBuild и MSDeploy . Ваш скрипт MSBuild должен выполнять такие действия, как запуск / остановка службы и т. Д. Затем разрешите MSDeploy скопировать файл. В MSDeploy вы можете использовать переключатель -whatif, чтобы указать, что вы хотите, чтобы отчет о действиях выполнялся только вместо того, чтобы фактически его выполнять. К сожалению, MSBuild не предлагает такую ​​опцию «из коробки», вам придется «встроить» ее в свои скрипты. Вы можете сделать это с помощью свойств и условий. Например, это может выглядеть примерно так:

<Project ...>
    <PropertyGroup>
      <!-- 
          Create the property to use, and declare a default value.
          Here I've defaulted this to true because it is better to force the
          caller to explicitly specify when to perform the action instead of it
          being the default.
      -->
      <SimulateExecution Condition= '$(SimulateExecution)'==''>true</SimulateExecution>
    </PropertyGroup>

    <Target Name="Deploy">
        <Message Text="Deploy started" />

        <Message Text="Stop service ABC on server Z"/>
        <WindowsService ... Condition=" '$(SimulateExecution)'=='false' "/>

        <Message Text="Stop service DEF on server Z"/>
        <WindowsService ... Condition=" '$(SimulateExecution)'=='false' "/>

        <!-- Call MSDeploy with the Exec task. -->
        <PropertyGroup>
            <MSDeployCommand>...\msdeploy.exe YOUR_OPTIONS_HERE</MSDeployCommand>

            <!-- Append the -whatif to the command if this is just a simulation -->
            <MSDeployCommand Condition= '$(SimulateExecution)'=='false' ">$(MSDeployCommand) -whatif</MSDeployCommand>
        </PropertyGroup>


         <Exec Command="$(MSDeployCommand)" />

         ... More things here
    </Target>
</Project>

Для действий службы вы можете использовать задачу WindowsService из MSBuild Extension Pack . Вам нужно будет заполнить пробелы там.

Когда вы вызываете MSDeploy, вы должны просто использовать задачу Exec , чтобы вызвать msdeploy.exe с вашими параметрами. Если вы передадите -whatif, он на самом деле не будет выполнять действия, просто сообщите, что он сделал бы. Они будут записаны в журнал msbuild. Поэтому, если вы запустите msbuild.exe с / fl, вы получите записанные действия в файл. Единственная проблема, с которой я столкнулся при использовании этого подхода, заключается в том, что для msdeploy.exe вам много раз приходилось использовать полные пути ( без. ), которые иногда могут быть хитрыми, поэтому опасайтесь таких путей.

...