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

Amazon web services AWS CodeDeploy失败:部署失败,因为此位置已存在指定文件,amazon-web-services,amazon-ec2,aws-code-deploy,Amazon Web Services,Amazon Ec2,Aws Code Deploy,我正在尝试使用Github设置AWS代码部署以自动化我的deloyment。我遇到的问题是ec2实例已经处于活动状态,并且具有web应用程序代码。问题是实例上还有其他我不想在源代码管理下使用的内容。 代码部署失败,出现以下错误: The deployment failed because a specified file already exists at this location 这是因为源代码位于实例上,未作为修订添加 所以我的问题是,有没有办法让代码部署将实例上的当前文件识别为初始版本

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

The deployment failed because a specified file already exists at this location
这是因为源代码位于实例上,未作为修订添加


所以我的问题是,有没有办法让代码部署将实例上的当前文件识别为初始版本?

在使用EC2实例的代码部署时,我也遇到了同样的问题

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

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

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

      你可以找到更多信息

      • (奇怪的是在“回滚”下)

      • (请参见--文件存在行为(字符串))


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

      如果您觉得不确定,那么将webroot复制到另一个文件夹中,在极不可能发生故障的情况下,您可以将其全部复制回来


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

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

    • 创建一个自由层EC2实例(t2.micro)。如果你的应用程序是巨大的,你可能需要更多的磁盘空间,所以根据需要进行调整。这不会运行你的应用程序

    • 创建指向该新实例的新部署组

    • 创建一个新的YAML,它实际上不执行任何安装前或安装后任务。你没有尝试运行你的应用程序。您实际上是在移动文件。这样您就可以获取清理文件

    • 部署后,将ssh插入ec2实例(记住在安全组中允许ssh!)并转到/opt/codedeploy-agent/deployment-root/deployment-instructions/

    • 您将看到{部署组标识符}-cleanup。将此scp复制到您实际希望在其上运行应用程序的ec2实例。或者,将其归档到主机上,然后再归档到主ec2实例上。这对我来说是最简单的选择,因为我的本地机器已经有了所有正确的钥匙

    • SSH到主ec2实例中,并将清理文件移动到/opt/codedeploy agent/deployment root/deployment instructions/中(如果还没有)。注意失败的{部署组标识符},并用失败的标识符替换清理文件的{部署组标识符}

    • 重新运行部署

    • 8

    • 利润

    • 当我有时间的时候,我将为这些步骤中的每一步提供更深入的说明(除了8和9…这将消失)。

      如果你只是想让错误消失,你可以使用一个早期的生命周期钩子脚本(可能在安装之前)在稍后的钩子中重新添加源之前删除该文件夹。如果源代码没有在以后的钩子中重新添加,请自己添加


      即使在新实例上,我也会遇到这个错误,所以CodeDeploy必须以某种方式缓存该文件夹,然后对它这样做感到不安

      我不确定这是否是同一个问题,它在一个新实例上工作,而该实例上没有预先存在的代码,但是当repo中的代码已经手动添加到该实例时,就会发生错误