AWS CodeDeploy失败:部署失败,因为此位置已存在指定的文件

时间:2017-01-11 11:56:14

标签: amazon-web-services amazon-ec2 aws-code-deploy

我正在尝试使用Github设置AWS Code部署以自动部署我的部署。我遇到的问题是ec2实例已经处于活动状态并且具有Web应用程序代码。问题是在源代码控制下我还不想要实例上的其他内容。 代码部署失败,出现以下错误:

The deployment failed because a specified file already exists at this location

这是因为源代码位于实例上,并未添加为修订版。

所以我的问题是,是否有任何方法可以使代码部署将实例上的当前文件识别为初始修订版?

5 个答案:

答案 0 :(得分:11)

这是可能的!这是部署期间的一个选项:“内容选项: 选择在部署期间,当目标实例上的文件与应用程序修订中的文件同名时,对于同一目标位置,AWS CodeDeploy将采取的操作。“

您可以选择失败,覆盖和保留。保留可能是您的最佳选择。

您可以找到更多信息

答案 1 :(得分:1)

使用EC2实例在CodeDeploy中工作时遇到了同样的问题。

  • 我从AWS CodeDeploy部署组中删除了EC2实例。我向部署组添加了新的EC2实例。
  • 否则,将新部署组替换为现有部署组。

答案 2 :(得分:1)

您可以简单地删除Web根目录的全部内容,并允许CodeDeploy更新它。任何类型的部署都将替换整个内容。

如果您感到不确定,请将webroot复制到另一个文件夹,并且在极不可能的情况下,您可以将其全部复制回来。

在磁盘上修改文件时,部署通常会失败,我假设CodeDeploy正在检查文件的修改时间。

答案 3 :(得分:0)

问题是CodeDeploy维护一个每次部署后都会更新的清理文件。这些是在安装新文件之前将删除的文件。你当然可以自己创造,但这很难。 CodeDeploy的目的是让事情变得简单。这就是我所做的(注意:我的应用程序有很多文件,我正要找到除了CodeDeploy之外的其他东西,实际上很容易转换到它而不是痛苦和愚蠢,然后我制定了这种方法;如果你有一个小的文件数量,可能更容易创建BeforeInstall脚本或手动删除它们:

  1. 创建一个免费的EC2实例(t2.micro)。如果您的应用程序很庞大,则可能需要更多磁盘空间,因此请根据需要进行调整。这不会运行你的应用程序!

  2. 创建指向该新实例的新部署组。

  3. 创建一个实际上不执行任何BeforeInstall或AfterInstall任务的新YAML。您没有尝试运行您的应用。你真的在移动文件。这样您就可以获取该清理文件。

  4. 部署之后,ssh进入ec2实例(记得在安全组中允许SSH!)并转到/ opt / codedeploy-agent / deployment-root / deployment-instructions /

  5. 您将看到{deployment-group-identifier} -cleanup。 scp到您实际想要运行应用程序的ec2实例。或者,将FileZilla放到主机上,然后放到主ec2实例上。这对我来说是最简单的选择,因为我的本地机器已经拥有了所有正确的钥匙。

  6. SSH进入主ec2实例并将清理文件移动到/ opt / codedeploy-agent / deployment-root / deployment-instructions /中(如果尚未存在)。注意失败的{deployment-group-identifier}并用清除标识符替换清理文件的{deployment-group-identifier}。

  7. 重新运行部署。

  8. 8 ???。

    1. 利润。
    2. 当我有时间时,我会为每个步骤(除了8和9 ......除外)提供更深入的说明。

答案 4 :(得分:0)

如果只想消除错误,则可以使用较早的Lifecycle Hook脚本之一(也许在安装之前)删除该文件夹,然后再在以后的Hook中重新添加源。如果在以后的Hook中没有重新添加源,请自己添加。

即使在新实例上我也遇到此错误,因此CodeDeploy必须以某种方式缓存该文件夹,然后对此感到不高兴。