我正在尝试使用Github设置AWS Code部署以自动化我的部署。我遇到的问题是ec2实例已经处于活动状态并且具有Web应用程序代码。问题是在源代码控制下我还不想要实例上的其他内容。代码部署失败,出现以下错误:
The deployment failed because a specified file already exists at this location
这是因为源代码位于实例上,并未添加为修订版。
所以我的问题是,是否有任何方法可以使代码部署将实例上的当前文件识别为初始修订版?
这个有可能!这是部署期间的一个选项:“内容选项:当目标实例上的文件与应用程序修订中的文件同名时,为同一目标位置选择部署期间AWS CodeDeploy要执行的操作。”
您可以选择失败,覆盖和保留。保留可能是您的最佳选择。
您可以找到更多信息
在使用EC2实例的CodeDeploy中工作时遇到了同样的问题。
您只需删除Web根目录的全部内容,并允许CodeDeploy更新它。任何类型的部署都将替换整个内容。
如果您感到不确定,请将webroot复制到另一个文件夹,并且在极不可能发生故障的情况下,您可以将其全部复制回来。
在磁盘上修改文件时,部署通常会失败,我假设CodeDeploy正在检查文件的修改时间。
如果您只是希望错误消失,您可以使用早期的Lifecycle Hook脚本之一(可能是BeforeInstall)删除该文件夹,然后再在以后的Hook中重新添加源。如果未在以后的Hook中重新添加源,请自行添加。
我甚至在新实例上遇到此错误,因此CodeDeploy必须以某种方式缓存该文件夹,然后对它这样做感到不安。
问题是CodeDeploy维护一个清理文件,它在每次部署后都会更新。这些是在安装新文件之前将删除的文件。你当然可以自己创造,但这很难。 CodeDeploy的目的是让事情变得简单。这就是我所做的(注意:我的应用程序有很多文件,我正要找到除了CodeDeploy之外的其他东西,实际上很容易转换到它而不是痛苦和愚蠢,然后我制定了这种方法;如果你有一个小的文件数量,创建BeforeInstall脚本或手动删除它们可能更容易):
8.???
当我有时间时,我将为每个步骤提供更深入的说明(除了8和9 ......将会消失)。