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

问题描述 投票:9回答:5

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

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

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

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

amazon-web-services amazon-ec2 aws-code-deploy
5个回答
13
投票

这个有可能!这是部署期间的一个选项:“内容选项:当目标实例上的文件与应用程序修订中的文件同名时,为同一目标位置选择部署期间AWS CodeDeploy要执行的操作。”

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

您可以找到更多信息


1
投票

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

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

1
投票

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

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

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


1
投票

如果您只是希望错误消失,您可以使用早期的Lifecycle Hook脚本之一(可能是BeforeInstall)删除该文件夹,然后再在以后的Hook中重新添加源。如果未在以后的Hook中重新添加源,请自行添加。

我甚至在新实例上遇到此错误,因此CodeDeploy必须以某种方式缓存该文件夹,然后对它这样做感到不安。


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

  1. 利润。

当我有时间时,我将为每个步骤提供更深入的说明(除了8和9 ......将会消失)。

© www.soinside.com 2019 - 2024. All rights reserved.