2

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

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

<!--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. 

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

ответ

3

Более простой способ установки пакетов 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

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

+0

Brilliant! Спасибо, отлично работал. Намного проще, чем использовать поставщик runcommand. –

+0

Для тех, кто борется с msbuild и провайдером runcommand, я думаю, проблема заключается в том, что когда msbuild использует цель для сборки файла манифеста archive.xml, он не учитывает параметр waitInterval. Одним из способов может быть использование этого подхода (http://www.codeproject.com/Articles/539088/Amazon-AWSDeploy-To-Provision-Multiple-Websites?fid=1825739&df=90&mpp=25&noise=1&prof=True&sort = Position & view = None & spc = Relaxed) и введите код файла верхнего уровня, чтобы вы могли указать атрибуты waitInteval для элементов runCommand. –

 Смежные вопросы

  • Нет связанных вопросов^_^