awsdeploy -> msdeploy -> время ожидания runCommand

Я использую awsdeploy для развертывания приложения ASP.NET MVC с эластичным beanstalk. Для приложения требуется Crystal Reports, который можно установить только с помощью установщика MSI (CRRuntime_64bit_13_0_6.msi).

Чтобы запустить установщик как часть развертывания, я добавил пользовательскую цель, например, так:

<!--install msi-->
  <Target Name="InstallCrystalReports" AfterTargets="AddIisSettingAndFileContentsToSourceManifest">
    <Message Text="Install Crystal Reports msi" />
    <ItemGroup>
      <MsDeploySourceManifest Include="runCommand">
        <Path>c:\mypath\installCrystalReports.cmd</Path>
        <waitAttempts>20</waitAttempts>
        <waitInterval>300000</waitInterval>
        <dontUseCommandExe>false</dontUseCommandExe>
        <AdditionalProviderSettings>waitAttempts;waitInterval;dontUseCommandExe</AdditionalProviderSettings>
      </MsDeploySourceManifest>
    </ItemGroup>
  </Target>

Установка может занять около минуты, и я могу просмотреть файлы журналов, созданные установщиком, чтобы убедиться, что они были запущены. Тем не менее, runCommand позволит ему работать максимум 5 секунд, прежде чем завершить его с ошибкой. Изменение waitAttempts и waitInterval, кажется, не имеет никакого влияния.

Ниже в выдержке из "C:\Program Files\Amazon\ElasticBeanstalk\logs\AWSDeployment.log", которая показывает, как awsdeploy/msdeploy преждевременно завершает установку.

2013-08-19 12:42:11,428 INFO 5 DeploymentLog - C:\mypath>msiexec /i  CRRuntime_64bit_13_0_6.msi /quiet /norestart /l C:\mypath\CRRuntime_64bit_13_0_6.txt 

2013-08-19 12:42:12,426 WARN 1 AWSBeanstalkCfnDeploy.DeploymentUtils - The process 'C:\Windows\system32\cmd.exe' (command line '') is still running. Waiting for 1000 ms (attempt 1 of 5).
2013-08-19 12:42:12,426 WARN 1 DeploymentLog - The process 'C:\Windows\system32\cmd.exe' (command line '') is still running. Waiting for 1000 ms (attempt 1 of 5).
2013-08-19 12:42:13,440 WARN 1 AWSBeanstalkCfnDeploy.DeploymentUtils - The process 'C:\Windows\system32\cmd.exe' (command line '') is still running. Waiting for 1000 ms (attempt 2 of 5).
2013-08-19 12:42:13,440 WARN 1 DeploymentLog - The process 'C:\Windows\system32\cmd.exe' (command line '') is still running. Waiting for 1000 ms (attempt 2 of 5).
2013-08-19 12:42:14,454 WARN 1 AWSBeanstalkCfnDeploy.DeploymentUtils - The process 'C:\Windows\system32\cmd.exe' (command line '') is still running. Waiting for 1000 ms (attempt 3 of 5).
2013-08-19 12:42:14,454 WARN 1 DeploymentLog - The process 'C:\Windows\system32\cmd.exe' (command line '') is still running. Waiting for 1000 ms (attempt 3 of 5).
2013-08-19 12:42:15,468 WARN 1 AWSBeanstalkCfnDeploy.DeploymentUtils - The process 'C:\Windows\system32\cmd.exe' (command line '') is still running. Waiting for 1000 ms (attempt 4 of 5).
2013-08-19 12:42:15,468 WARN 1 DeploymentLog - The process 'C:\Windows\system32\cmd.exe' (command line '') is still running. Waiting for 1000 ms (attempt 4 of 5).
2013-08-19 12:42:16,482 WARN 1 AWSBeanstalkCfnDeploy.DeploymentUtils - The process 'C:\Windows\system32\cmd.exe' (command line '') is still running. Waiting for 1000 ms (attempt 5 of 5).
2013-08-19 12:42:16,482 WARN 1 DeploymentLog - The process 'C:\Windows\system32\cmd.exe' (command line '') is still running. Waiting for 1000 ms (attempt 5 of 5).
2013-08-19 12:42:16,482 ERROR 1 AWSBeanstalkCfnDeploy.DeploymentUtils - Exception during deployment.

Любые идеи, как я могу увеличить время ожидания, чтобы установщик работал успешно? Или какие-нибудь другие идеи, как я мог запустить установщик как часть развертывания?

1 ответ

Решение

Более простой способ установки пакетов MSI на экземпляры AWS Elastic Beanstalk - это использовать .ebextensions механизм.

Создайте в своем проекте папку с именем .ebextensionsи поместите туда файл с расширением .config (например installs.config). Это файл YAML, в котором описываются установки для выполнения и команды для запуска на каждом экземпляре перед развертыванием. Простой пример может выглядеть так

packages:
    msi:
      CrystalReports: http://myfilehost.com/packages/CrystalReports.msi

Там, где URL является общедоступным местом, вы можете разместить свой MSI. Это может быть, например, ведро S3.

Подробнее о настройке AWS Elastic Beanstalk можно узнать здесь: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-windows-ec2.html

Обзор этой функции можно найти в блоге разработчиков AWS здесь: http://blogs.aws.amazon.com/net/post/Tx1RLX98N5ERPSA/Customizing-Windows-Elastic-Beanstalk-Environments-Part-1

Другие вопросы по тегам