2017-02-23 91 views
0

我正在使用CloudFormation,CodePipeline,CodeDeploy,& CodeCommit将Rails应用程序部署到EC2实例。CodeDeploy在DownloadBundle上失败,说道Broken pipe @ io_write - <STDERR>

构建堆栈之后,CodePipeline开始启动,第一次部署成功,没有问题,但之后在DownloadBundle步骤失败后都会部署。如果我重新启动EC2实例上的codedeploy-agent,那么下一次部署将成功,但以下部署将像以前一样失败。

从AWS控制台,CodeDeploy抱怨说, “太少了健康的实例可用”(错误代码:HEALTH_CONSTRAINTS)

在 “查看事件” CodeDeploy的链接它显示:

Error Code: UnknownError 
Script Name 
Message:  Broken pipe @ io_write - <STDERR> 
Log Tail 

这里是从codedeploy-agent.log输出:

2017-02-23 21:18:33 INFO [codedeploy-agent(28647)]: [Aws::CodeDeployCommand::Client 200 0.041592 0 retries] put_host_command_complete(command_status:"Failed",diagnostics:{format:"JSON",payload:"{\"error_code\":5,\"script_name\":\"\",\"message\":\"Broken pipe @ io_write - <STDERR>\",\"log\":\"\"}"},host_command_identifier:" . . . . ") 

2017-02-23 21:18:33 ERROR [codedeploy-agent(28647)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Error during perform: Errno::EPIPE - Broken pipe @ io_write - <STDERR> - /usr/local/lib/ruby/gems/2.2.0/gems/rubyzip-1.2.1/lib/zip/entry.rb:573:in `write' /usr/local/lib/ruby/gems/2.2.0/gems/rubyzip-1.2.1/lib/zip/entry.rb:573:in `warn' /usr/local/lib/ruby/gems/2.2.0/gems/rubyzip-1.2.1/lib/zip/entry.rb:573:in `rescue in set_time' /usr/local/lib/ruby/gems/2.2.0/gems/rubyzip-1.2.1/lib/zip/entry.rb:571:in `set_time' /usr/local/lib/ruby/gems/2.2.0/gems/rubyzip-1.2.1/lib/zip/entry.rb:365:in `read_c_dir_entry' /usr/local/lib/ruby/gems/2.2.0/gems/rubyzip-1.2.1/lib/zip/entry.rb:191:in `read_c_dir_entry' /usr/local/lib/ruby/gems/2.2.0/gems/rubyzip-1.2.1/lib/zip/central_directory.rb:127:in `block in read_central_directory_entries' /usr/local/lib/ruby/gems/2.2.0/gems/rubyzip-1.2.1/lib/zip/central_directory.rb:126:in `times' /usr/local/lib/ruby/gems/2.2.0/gems/rubyzip-1.2.1/lib/zip/central_directory.rb:126:in `read_central_directory_entries' /usr/local/lib/ruby/gems/2.2.0/gems/rubyzip-1.2.1/lib/zip/central_directory.rb:138:in `read_from_stream' /usr/local/lib/ruby/gems/2.2.0/gems/rubyzip-1.2.1/lib/zip/file.rb:77:in `block in initialize' /usr/local/lib/ruby/gems/2.2.0/gems/rubyzip-1.2.1/lib/zip/file.rb:76:in `open' /usr/local/lib/ruby/gems/2.2.0/gems/rubyzip-1.2.1/lib/zip/file.rb:76:in `initialize' /usr/local/lib/ruby/gems/2.2.0/gems/rubyzip-1.2.1/lib/zip/file.rb:98:in `new' /usr/local/lib/ruby/gems/2.2.0/gems/rubyzip-1.2.1/lib/zip/file.rb:98:in `open' /opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/command_executor.rb:317:in `unpack_bundle' /opt/codedeploy-agent/lib/instance_agent/plugins/codedeploy/command_executor.rb:98: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>' 

我见过其他人有类似的问题,但不是特别是我在这里看到的。

一些解决方案,我遇到:

配置周期性地重新启动codedeploy代理一个cron。 #重新启动代理不是一个实际的解决方案。

其他问题似乎与如何从S3或GitHub提取代码有关。 #此部署使用CodeCommit而不是S3或GitHub。

如果需要,我可以提供更多的细节。

回答

0

解决

事实证明,我的部署脚本之一是生成与CodeDeploy剂红宝石错误(见原问题codedeploy代理输出)。一旦我从appspec.yml中删除该脚本,该部署就再次开始工作。

这不是很直观,因为CodeDeploy错误在DownloadBundle步骤中出现。显然,部署正在经过该步骤,并且在AfterInstall步骤中失败了第二个部署脚本。

我浪费了很多时间追逐我认为是权限问题。

相关问题