CodeDeploy更新appspec.yml/脚本后部署失败问题求助
解决方案:修改appspec.yml/脚本后CodeDeploy部署失败的排查与修复
1. 确认部署包包含最新修改
- 每次修改后打包,必须确保appspec.yml和所有脚本文件(
stop_tomcat_server、delete_root_resource、start_tomcat_server)都被正确纳入部署包 - 本地解压部署包,核对文件的修改时间、内容是否和本地最新版本一致,避免手动打包遗漏文件
- 建议用自动化脚本(如Shell、Maven)完成打包流程,确保文件同步无误差
2. 清理CodeDeploy代理缓存
CodeDeploy代理会缓存旧部署包内容,导致新修改不生效,执行以下操作清理:
- 登录目标服务器,停止代理:
sudo service codedeploy-agent stop - 删除缓存目录:
sudo rm -rf /opt/codedeploy-agent/deployment-root/deployment-instructions /opt/codedeploy-agent/deployment-root/<你的部署组ID> - 重启代理:
sudo service codedeploy-agent start
3. 检查脚本权限与执行逻辑
- 确保脚本有可执行权限:打包前本地执行
chmod +x scripts/*,并确认部署包中权限保留 - 手动在目标服务器上执行脚本,验证逻辑:
- 执行
sudo ./scripts/stop_tomcat_server,检查Tomcat是否正常停止 - 执行
sudo ./scripts/delete_root_resource,确认旧ROOT资源被删除 - 执行
sudo ./scripts/start_tomcat_server,验证Tomcat启动无报错
- 执行
- 核对脚本中的路径:比如
/opt/iplass01/tomcat/是否在目标服务器上存在,无拼写错误
4. 查看日志定位具体错误
- 查看CodeDeploy代理日志:
tail -f /var/log/aws/codedeploy-agent/codedeploy-agent.log - 查看脚本执行日志:路径通常为
/opt/codedeploy-agent/deployment-root/<部署ID>/<部署组>/logs/scripts/,对应每个钩子脚本的输出 - 根据日志中的错误信息修复:比如脚本超时、文件不存在、权限不足等问题
5. 修正appspec.yml语法与部署策略
- 检查YAML语法:比如你提供的配置中,
files下的destination行缩进需和source对齐,避免语法错误导致部署失败 - 创建新部署任务时,选择「忽略上次失败部署」选项,强制使用最新部署包
- 若多次失败,先回滚到上次成功版本,再重新部署最新修改的包
6. 验证服务状态与权限
- 确认CodeDeploy服务角色有足够权限访问S3部署包和目标EC2实例
- 检查服务器上的CodeDeploy代理状态:
sudo service codedeploy-agent status,异常则重装代理
内容的提问来源于stack exchange,提问作者Tuyen Nguyen
相关产品推荐
相关产品推荐

