CodeDeploy在BeforeInstall阶段陷入挂起状态,部署最终失败
排查CodeDeploy BeforeInstall阶段挂起及代理无法接收事件问题
查看CodeDeploy代理日志细节
即便代理状态显示运行中,日志里大概率藏着具体故障线索。根据实例系统执行对应命令查看日志:- 亚马逊Linux/RHEL:
tail -f /var/log/aws/codedeploy-agent/codedeploy-agent.log - Ubuntu:
tail -f /var/log/aws/codedeploy-agent/codedeploy-agent.log - Windows:检查
C:\ProgramData\Amazon\CodeDeploy\log\codedeploy-agent.log
重点关注BeforeInstall阶段前后的日志条目,排查是否有连接超时、脚本执行权限不足、依赖包缺失等报错。
- 亚马逊Linux/RHEL:
验证实例与CodeDeploy服务的网络连通性
代理运行不代表能正常和CodeDeploy服务器通信。在实例上执行以下命令测试(替换<你的区域>为实际部署区域,比如us-east-1):telnet codedeploy.<你的区域>.amazonaws.com 443如果连接失败,检查实例安全组是否允许出站443端口访问CodeDeploy服务,同时确认子网NACL没有限制对应流量。
排查BeforeInstall钩子脚本
阶段挂起通常是脚本执行卡住导致:- 检查appspec.yml中BeforeInstall阶段的脚本,是否存在需要交互式输入的命令(比如
apt-get install未加-y参数、pip安装时需要手动确认) - 确认脚本没有无限循环、等待用户输入的逻辑
- 给脚本添加日志输出,在关键步骤后写入本地日志文件,方便定位卡顿环节
- 手动在实例上运行该脚本,验证是否能正常执行完成
- 检查appspec.yml中BeforeInstall阶段的脚本,是否存在需要交互式输入的命令(比如
再次确认实例IAM角色权限
检查实例关联的IAM角色是否包含AmazonEC2RoleforAWSCodeDeploy托管权限,或自定义权限中包含codedeploy:PutLifecycleEventHookExecutionStatus等关键操作权限——代理需要该权限上报生命周期事件状态。更新CodeDeploy代理版本
旧版本代理可能与新版CodeDeploy服务存在兼容性问题,执行对应命令更新:- 亚马逊Linux:
sudo yum update codedeploy-agent - Ubuntu:
sudo apt-get update && sudo apt-get install codedeploy-agent - Windows:重新下载安装官方最新版代理
- 亚马逊Linux:
校验实例时间同步状态
实例本地时间与AWS服务器时间偏差过大,会导致SSL证书验证失败,阻断代理与服务的通信。执行date命令查看时间,确保与UTC时间偏差在5分钟内,可配置NTP服务自动同步时间。
内容的提问来源于stack exchange,提问作者Gnandeep Gottipati
相关产品推荐
相关产品推荐

