调用 Msdeploy 时 AWS 代码部署失败

AWS Code Deploy Fails When Calling Msdeploy

我正在努力设置我们的构建过程,以将 AWS 代码部署与自动缩放组一起使用。我已经成功地构建了代码并使用 appspec.yml 和 BeforeInstall.bat 文件进行了压缩,所有这些都正确地移动到了 S3。代码部署正确地拉下 zip 文件,将其解压缩并调用 BeforeInstall.bat。批处理文件有 3 个步骤

  1. 停止应用程序池
  2. 停止网站
  3. 致电website.deploy.cmd

它正确地完成了第 1 步和第 2 步,但是当它到达第 3 步时它调用 msdeploy 并且 returns 这个错误:

Error: There was an error reading IIS configuration schema from 'C:\Windows\system32\inetsrv\config\schema\'

认为这可能是权限问题,我登录到其中一台服务器并手动 运行cmd 脚本。它部署得很好,考虑到我以管理员身份登录,这并不奇怪。然后,我以 LocalSystem 用户(即 CodeDeploy Host Agent Service 运行 的用户身份)和 运行 cmd 脚本打开了一个 powershell 脚本。它成功完成。我 运行 整个批处理文件作为 LocalSystem 用户。 运行 成功了。

然后我返回并添加 echo %username% 到批处理脚本,提交、构建并 运行 一个新的部署。我在代码部署日志 WIN-49GNL2FRHJ4$ 中看到了这个用户。部署仍然失败。当我 运行 来自 powershell window 的盒子上的批处理脚本为 Administrator 时,我当然会看到 Administrator 回显。脚本成功。当我 运行 来自 powershell window 作为 LocalSystem 的批处理脚本时,我看到 WIN-49GNL2FRHJ4$,就像它是通过 AWS 控制台来自 CodeDeploy 的 运行 一样,但是它成功 运行s.

AWS 控制台如何以 LocalSystem 用户身份调用该批处理文件与我如何通过 powershell window 以该用户身份调用它之间有何不同?

看起来问题出在安装了旧版本的 Web Deploy。我去寻找日志并意识到我以某种方式安装了 v2(可能是我将 IIS 安装到 EC2 实例时的默认设置)。我下载并安装了最新版本(撰写本文时为 3.6 版)并创建了一个新部署。代码按预期部署。