CodeDeploy AfterInstall Hook未执行,求助获取详细日志方法
解决CodeDeploy AfterInstall Hook未执行及日志排查问题
核心日志位置
首先纠正日志路径误区:你找到的codedeploy-agent-deployments.log通常不记录脚本执行细节,真正有用的日志在以下两个位置:
- 脚本执行详细日志:每个部署实例都有独立的脚本日志,路径为
/opt/codedeploy-agent/deployment-root/<部署组UUID>/<部署ID>/logs/scripts.log。该文件会记录钩子脚本的所有标准输出、错误输出及执行返回码。 - Agent运行日志:查看CodeDeploy Agent本身的运行状态,路径为
/var/log/aws/codedeploy-agent/codedeploy-agent.log。这里能看到Agent是否成功读取appspec.yml、是否识别到AfterInstall钩子、是否尝试启动脚本等关键信息。
快速定位最新部署日志的命令:
# 按时间排序列出部署目录,取最新的5个 ls -lt /opt/codedeploy-agent/deployment-root/ | head -5
钩子未执行的常见排查点
结合你的场景,部署显示成功但脚本无动作,大概率是以下原因:
- 脚本路径错误:
appspec.yml中的location是相对于部署包根目录的路径,需确认data/afterinstall.sh确实在打包后的根目录下,而非嵌套在其他子目录中。 - 脚本缺少执行权限:打包前必须给脚本添加执行权限:
chmod +x data/afterinstall.sh,否则Agent无法执行脚本,且不会主动报错。 - appspec.yml格式错误:YAML对缩进严格,检查
Hooks、AfterInstall及子项的缩进是否一致(建议用2个空格缩进),格式错误会导致Agent忽略钩子配置。 - 脚本逻辑问题:你的脚本中
/final_path如果不存在,cd命令会失败,但默认情况下脚本不会终止执行,后续touch也不会生效。可以在脚本开头添加set -e,让脚本在遇到错误时立即退出,便于排查。
验证方法
- 重新触发一次部署,同时实时监控Agent日志:
tail -f /var/log/aws/codedeploy-agent/codedeploy-agent.log
- 部署完成后,找到对应部署的
scripts.log,查看是否有脚本执行记录及错误信息。
内容的提问来源于stack exchange,提问作者joels
相关产品推荐
相关产品推荐

