6

我正在尝试使用 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 进行拉取,为什么我会收到文件已存在错误?难道我做错了什么?

4

4 回答 4

4

您是使用不同的部署组部署相同的 git 存储库还是之前手动部署过?如果目标文件夹中已存在相同的资源,CodeDeploy 将检查目标文件夹中的资源是否由同一部署组创建。如果您使用相同的部署组,重新部署应该不会导致此问题。

CodeDeploy 主机代理的当前工作方式是下拉部署工件并根据 AppSpec 文件将它们移动到正确的存储库。即使您从 Github 存储库进行部署,也不仅仅是在目标文件夹中运行 git pull。

于 2016-01-25T23:45:49.437 回答
2

所有其他答案都是正确的,但在我看来,无法解决您的问题。然而,它们是一个很好的起点。(简而言之:codedeploy 看到一个在之前的 codedeploy 中无法推测的文件)

这可以在部署期间解决:“内容选项:当目标实例上的文件与应用程序修订中的文件同名时,选择 AWS CodeDeploy 在部署期间针对相同目标位置采取的操作。”

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

您找不到更多信息

于 2017-06-26T13:47:37.707 回答
1

由于该文件已存在于服务器中,CodeDeploy 具有可用于运行自定义脚本以清理现有文件的挂钩 (BeforeInstall),因为 codedeploy Install 不会覆盖已存在的文件。

于 2016-10-28T05:35:27.590 回答
0

我让它像这样工作:

由于各种原因,我有几次部署失败。问题是 CD 在 EC2 实例和路径 /opt/codedeploy-agent/deployment-root/​ 中保留了一个由失败部署的 ID 命名的文件夹 [a very long alphanumeric sting] 。删除此文件夹并 [从 aws UI 控制台] 创建一个新部署并重新部署应用程序。它现在应该成功了。

注意:CD 不会重写文件 [不是由其特定部署创建的]

CodeDeploy 不会部署在已有代码[文件] 的文件夹中,因为它不想干扰不同的 CD 部署和/或其他 CI/CD 工具 [如 Jenkins]。它仅部署在已经使用特定部署部署代码的路径中。

您可以清空要进行部署的文件夹并通过 CD 重新部署代码。

于 2016-01-27T11:12:56.013 回答