我正在尝试使用AWS CodeDeploy将我最新的更改从Github下拉到服务器。我遇到的问题是在安装步骤中我收到此错误:
Error CodeUnknownError
Script Name
MessageFile already exists at location /data/sites/wordpress/api_now_playing_staging.php
Log Tail
我的appspec.yml看起来像这样:
version: 0.0
os: "linux"
files:
- source: "/"
destination: "/data/sites/wordpress"
permissions:
- object: /data/sites/wordpress
pattern: "**"
owner: wp
group: nginx
mode: 755
type:
- file
我的问题是,如果git假设是使用CodeDeploy拉,为什么我的文件已经存在错误?我做错了吗?
答案 0 :(得分:3)
您是否使用其他部署组部署了相同的git repo,或者之前是否手动执行过?如果目标文件夹中已存在相同的资源,CodeDeploy将检查目标文件夹中的资源是否由同一部署组创建。如果您使用的是同一部署组,则重新部署不应导致此问题。
CodeDeploy主机代理的当前工作方式是下拉部署工件并根据AppSpec文件将它们移动到正确的存储库。即使您从Github仓库部署,它也不只是在目标文件夹中运行git pull。
答案 1 :(得分:2)
所有其他答案都是正确的,但在我看来,未能解决您的问题。然而,它们是一个很好的起点。 (简称:codedeploy在前面的代码部署中看到了一个不可用的文件)
这在部署期间是可解决的:“内容选项: 选择在部署期间,当目标实例上的文件与应用程序修订中的文件同名时,对于同一目标位置,AWS CodeDeploy将采取的操作。“
您可以选择失败,覆盖和保留。在你的情况下,覆盖可能是最好的选择。
您无法找到更多信息
docs.aws.amazon.com(奇怪的是'回滚')
cli docs.aws.amazon.com(参见--file-exists-behavior(string))
答案 2 :(得分:1)
由于该文件已存在于服务器中,因此CodeDeploy具有挂钩(BeforeInstall),可用于运行自定义脚本来清理现有文件,因为代码部署安装不会覆盖文件(如果已存在)。
答案 3 :(得分:0)
我让它像这样工作:
由于各种原因,我有几次失败的部署。问题是CD保留在EC2实例和路径/ opt / codedeploy-agent / deployment-root /由失败部署的ID命名的文件夹中[一个非常长的字母数字sting]。删除此文件夹并[从aws UI控制台]创建新部署并重新部署该应用程序。它现在应该成功。
注意:CD不会重写文件[尚未由其特定部署创建]
CodeDeploy不会部署在已有代码[files]的文件夹中,因为它不想干扰不同的CD部署和/或其他CI / CD工具[如Jenkins]。它仅部署在已部署具有特定部署的代码的路径中。
您可以清空部署要发生的文件夹,并通过CD重新部署代码。