我正在使用awsdeploy来部署弹性beanstalk ASP.NET MVC应用程序。该应用程序需要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.
任何想法如何增加超时以便安装程序成功运行?或者任何其他想法如何让安装程序作为部署的一部分运行?
答案 0 :(得分:3)
在AWS Elastic Beanstalk实例上安装MSI包的更简单方法是使用.ebextensions
机制。
在项目中创建一个名为.ebextensions
的文件夹,并在其中放置一个扩展名为.config
的文件(例如installs.config
)。这是一个YAML文件,它描述了要执行的安装,以及在部署之前在每个实例上运行的命令。一个简单的例子可能看起来像这样
packages:
msi:
CrystalReports: http://myfilehost.com/packages/CrystalReports.msi
如果网址是可公开访问的地方,您可以放置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