我正在设置我们的构建过程,以利用自动伸缩组部署AWS代码。我已经设法得到的代码构建和压缩与一个应用程序规范。yml和BeforeInstall.bat文件都正确移动到S3。代码部署正确地拉下zip文件,解压缩并调用BeforeInstall.bat。批处理文件有3个步骤
- 停止应用程序池
- 停止网站
- 调用website.deploy.cmd
它正确地完成了步骤1和2,但是当它到达步骤3时,它调用msdeploy并返回这个错误:
Error: There was an error reading IIS configuration schema from 'C:Windowssystem32inetsrvconfigschema'
认为这可能是权限问题,我登录到其中一个服务器并手动运行cmd脚本。它部署得很好,这并不奇怪,因为我是以Admin身份登录的。然后,我打开了一个powershell脚本作为LocalSystem
用户(这是CodeDeploy Host Agent Service
运行的),并运行cmd脚本。它成功地完成了。我以LocalSystem
用户的身份运行整个批处理文件。它运行成功。
然后我返回并将echo %username%
添加到批处理脚本中,提交、构建并运行一个新的部署。我在代码部署日志WIN-49GNL2FRHJ4$
中看到这个用户。部署仍然失败。当我从powershell窗口以Administrator
的身份在机器上运行批处理脚本时,我当然会看到Administrator
回显。脚本运行成功。当我从powershell窗口运行批处理脚本作为LocalSystem
时,我看到WIN-49GNL2FRHJ4$
,就像它通过AWS控制台从CodeDeploy运行时一样,但它成功运行了。
AWS控制台作为LocalSystem
用户调用该批处理文件的方式与我作为该用户通过powershell窗口调用它的方式有什么不同?
看起来问题是安装了旧版本的Web Deploy。我去寻找日志并意识到我不知何故安装了v2(可能是我在EC2实例上安装IIS时的默认值)。我下载并安装了最新版本(撰写本文时为v3.6),并创建了一个新的部署。代码按预期部署。