amazon-web-services - 由于错误 "install",使用 CodeDeploy 部署在 "File already exists"步骤失败

标签 amazon-web-services jenkins deployment aws-code-deploy

这是我在“安装”步骤中遇到的错误 -

File already exists at location /var/cake_1.2.0.6311-beta/app/webroot/../../somefile.php

我无法断定是什么事件导致了这种情况。但我记得的是——
  • 我通过 jenkins(集成了代码部署插件)启动了一个部署。部署在“安装”步骤失败,错误是我在上面粘贴的。

    注 - 这是 appspec.yml 文件的 files 部分中的第一个文件。
  • 据我所知,我直接通过代码部署(很可能使用 Jenkins 在上述步骤中创建的相同 S3 文件)在同一个部署组上进行了一些部署,并且成功了。
  • 然后我有几次失败的部署(在各个步骤故意失败,例如 beforeInstall 通过以非零数字退出)。

  • 此后,即使直接通过代码部署,我也无法获得任何成功的部署。

    背景

    我查了 this question看起来相关并尝试通过删除 /opt/codedeploy-agent/deployment-root/​ 中的所有内容来尝试,如 one of the answers 中所述,但是,它导致我的实例中的代码部署损坏,并且通过 Jenkins 部署开始抛出这个错误,说 appspec 文件来自存档(它试图寻找最后一个成功的部署,似乎已被删除)没有找到 -

    Jenkins triggered code deploy is failing at ApplicationStop step even though same deployment group via code deploy directly is running successfully

    然后我在实例上重新安装了代码部署,上面提到的步骤是我之后所做的。

    更新 - 开放赏金

    正如 Rodrigo M 所回答的那样,到目前为止,从实例的部署路径中删除此类文件对我来说是有效的,但对于这个特定文件来说,这同样不起作用 -
     File already exists at location /var/cake_1.2.0.6311-beta/deployment/serverLoad.json
    

    我验证了以下内容-
  • 从所有实例的上述位置删除文件后,我进行了新的部署。我观察到文件重新出现,但仍然抛出与上述相同的错误并且部署失败。
  • 没有删除,我将文件修改为 777。结果相同。

  • 有趣的是,昨天我收到了多个文件的这个错误,当我找到它们并进行新构建时,我将它们一个一个地删除。除了这个文件外,所有其他文件的问题都得到了解决,即使删除也不起作用。我没有线索!

    注意 - 我现在正在做的所有部署都是由 Jenkins 触发的(没有从 AWS 代码部署触发的直接部署)。

    这是来自 /var/log/aws/codedeploy-agent/codedeploy-agent.log 的日志记录包含相关的错误堆栈 strace -
    2016-11-10 07:38:12 INFO  [codedeploy-agent(16889)]: Version file found in /opt/codedeploy-agent/.version.
    2016-11-10 07:38:12 INFO  [codedeploy-agent(16889)]: [Aws::CodeDeployCommand::Client 200 0.025545 0 retries] put_host_command_complete(command_status:"Failed",diagnostics:{format:"JSON",payload:"{\"error_code\":5,\"script_name\":\"\",\"message\":\"File already exists at location /var/cake_1.2.0.6311-beta/deployment/serverLoad.json\",\"log\":\"\"}"},host_command_identifier:"WyJjb20uYW1hem9uLmFwb2xsby5kZXBsb3ljb250cm9sLmRvbWFpbi5Ib3N0Q29tbWFuZElkZW50aWZpZXIiLHsiZGVwbG95bWVudElkIjoiQ29kZURlcGxveS91cy1lYXN0LTEvUHJvZC9hcm46YXdzOnNkczp1cy1lYXN0LTE6Mzc3NzAzOTYxOTk4OmRlcGxveW1lbnQvZC1VOVFPR0RBWUkiLCJob3N0SWQiOiJhcm46YXdzOmVjMjp1cy1lYXN0LTE6Mzc3NzAzOTYxOTk4Omluc3RhbmNlL2ktZWNmYzU1YTkiLCJjb21tYW5kTmFtZSI6Ikluc3RhbGwiLCJjb21tYW5kUG9zaXRpb24iOjQsImNvbW1hbmRBdHRlbXB0IjoxfV0=")
    
    2016-11-10 07:38:12 ERROR [codedeploy-agent(16889)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Error during perform: RuntimeError - File already exists at location /var/cake_1.2.0.6311-beta/deployment/serverLoad.json - /opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/installer.rb:115:in `generate_normal_copy'
    /opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/installer.rb:67:in `block (2 levels) in generate_instructions'
    /opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/installer.rb:55:in `each'
    /opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/installer.rb:55:in `block in generate_instructions'
    /opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/install_instruction.rb:68:in `generate_instructions'
    /opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/installer.rb:54:in `generate_instructions'
    /opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/installer.rb:34:in `install'
    /opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/command_executor.rb:114:in `block in <class:CommandExecutor>'
    /opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/command_executor.rb:62:in `execute_command'
    /opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/command_poller.rb:132:in `process_command'
    /opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/command_poller.rb:65:in `perform'
    /opt/codedeploy-agent/lib/instance_agent/agent/base.rb:28:in `run'
    /opt/codedeploy-agent/lib/instance_agent/runner/child.rb:38:in `block in run'
    /opt/codedeploy-agent/lib/instance_agent/runner/child.rb:55:in `with_error_handling'
    /opt/codedeploy-agent/lib/instance_agent/runner/child.rb:37:in `run'
    /opt/codedeploy-agent/vendor/gems/process_manager-0.0.13/lib/process_manager/child.rb:70:in `block in run_with_error_handling'
    /opt/codedeploy-agent/lib/instance_agent/runner/child.rb:55:in `with_error_handling'
    /opt/codedeploy-agent/vendor/gems/process_manager-0.0.13/lib/process_manager/child.rb:69:in `run_with_error_handling'
    /opt/codedeploy-agent/vendor/gems/process_manager-0.0.13/lib/process_manager/child.rb:33:in `block in start'
    /opt/codedeploy-agent/vendor/gems/process_manager-0.0.13/lib/process_manager/child.rb:22:in `loop'
    /opt/codedeploy-agent/vendor/gems/process_manager-0.0.13/lib/process_manager/child.rb:22:in `start'
    /opt/codedeploy-agent/vendor/gems/process_manager-0.0.13/lib/process_manager/master.rb:206:in `block in spawn_child'
    /opt/codedeploy-agent/vendor/gems/process_manager-0.0.13/lib/process_manager/master.rb:204:in `fork'
    /opt/codedeploy-agent/vendor/gems/process_manager-0.0.13/lib/process_manager/master.rb:204:in `spawn_child'
    /opt/codedeploy-agent/vendor/gems/process_manager-0.0.13/lib/process_manager/master.rb:196:in `block in spawn_children'
    /opt/codedeploy-agent/vendor/gems/process_manager-0.0.13/lib/process_manager/master.rb:195:in `times'
    /opt/codedeploy-agent/vendor/gems/process_manager-0.0.13/lib/process_manager/master.rb:195:in `spawn_children'
    /opt/codedeploy-agent/vendor/gems/process_manager-0.0.13/lib/process_manager/master.rb:134:in `start'
    /opt/codedeploy-agent/vendor/gems/process_manager-0.0.13/lib/process_manager/master.rb:37:in `block in start'
    /opt/codedeploy-agent/vendor/gems/process_manager-0.0.13/lib/process_manager/master.rb:36:in `fork'
    /opt/codedeploy-agent/vendor/gems/process_manager-0.0.13/lib/process_manager/master.rb:36:in `start'
    /opt/codedeploy-agent/bin/../lib/codedeploy-agent.rb:41:in `block (2 levels) in <main>'
    /opt/codedeploy-agent/vendor/gems/gli-2.5.6/lib/gli/command_support.rb:130:in `call'
    /opt/codedeploy-agent/vendor/gems/gli-2.5.6/lib/gli/command_support.rb:130:in `execute'
    /opt/codedeploy-agent/vendor/gems/gli-2.5.6/lib/gli/app_support.rb:262:in `block in call_command'
    /opt/codedeploy-agent/vendor/gems/gli-2.5.6/lib/gli/app_support.rb:275:in `call'
    /opt/codedeploy-agent/vendor/gems/gli-2.5.6/lib/gli/app_support.rb:275:in `call_command'
    /opt/codedeploy-agent/vendor/gems/gli-2.5.6/lib/gli/app_support.rb:69:in `run'
    /opt/codedeploy-agent/bin/../lib/codedeploy-agent.rb:88:in `<main>'
    

    更新 2

    通过重命名 json 文件并删除 appspec.yml 中的旧文件引用,我能够应用脏修复。但是,在新的部署组(具有新的 ec2 实例)上,新的 json 文件会导致相同的文件退出问题。每次更改文件名都很痛苦。对正在发生的事情非常恼火。

    最佳答案

    作为其流程的一部分,CodeDeploy 将查找有关之前为应用程序/部署组部署的文件的信息。如果然后它使用此信息删除现有文件,根据需要准备部署新修订。

    http://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-steps.html#deployment-rollback

    在这种情况下,由于您之前可能已经进行了手动清理,因此存在一些不一致的引用。

    对于所有部署,一个不错的选择是在 BeforeInstall 期间简单地删除部署文件夹中的所有文件。钩。这将解决这个问题现在和 future 。

    关于amazon-web-services - 由于错误 "install",使用 CodeDeploy 部署在 "File already exists"步骤失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38832762/

    相关文章:

    java - JBoss AS 7 自动部署插件无法连接到本地主机 :8080

    deployment - 使用 Maven 进行部署

    amazon-web-services - 使用 Fabric 或 Boto 连接到 AWS 实例并运行 Shell 命令的简单方法

    amazon-web-services - 从 serverless.yml 创建 AWS Cognito 用户池

    amazon-web-services - 在api网关的方法请求中设置默认参数

    android - 如何自动将 Android 应用程序从 Jenkins 上传到 Google Play Alpha 测试?

    java - Jenkins多次执行bash JDK安装脚本

    google-app-engine - 谷歌应用引擎与亚马逊网络服务

    Jenkins 发布 TestNG 结果不起作用

    visual-studio-2010 - 从与我的应用程序相同的位置启用下载先决条件