You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EC2上CodeDeploy的appspec.yml与控制台pip执行行为不一致排查

问题排查与解决方案

核心问题:相对路径导致虚拟环境激活失效

CodeDeploy执行Hook脚本时的工作目录并非/home/ec2-user,而是部署包的临时解压目录(例如/opt/codedeploy-agent/deployment-root/<部署组ID>/<部署ID>/deployment-archive)。你的脚本中使用source venv/bin/activate这种相对路径,会尝试加载当前工作目录下的venv,而非/home/ec2-user下的目标虚拟环境——这就是手动执行正常、但CodeDeploy执行时包未更新的根本原因。

具体修复方案

1. 用绝对路径激活虚拟环境

修改start_server脚本中的激活命令,指定虚拟环境的完整路径:

source /home/ec2-user/venv/bin/activate
cd /home/ec2-user
pip install -r requirements.txt

2. 更可靠的方式:直接调用虚拟环境的pip

跳过source激活步骤,直接使用虚拟环境内的pip绝对路径执行安装,彻底避免环境变量加载问题:

/home/ec2-user/venv/bin/pip install -r /home/ec2-user/requirements.txt

3. 添加日志排查隐藏问题(可选)

在脚本中加入日志输出,方便查看CodeDeploy执行时的上下文细节:

echo "当前工作目录: $(pwd)" >> /home/ec2-user/deploy_debug.log
echo "使用的Python路径: $(which python)" >> /home/ec2-user/deploy_debug.log
echo "使用的pip路径: $(which pip)" >> /home/ec2-user/deploy_debug.log
pip install -r requirements.txt -v >> /home/ec2-user/deploy_debug.log 2>&1

部署完成后查看/home/ec2-user/deploy_debug.log,可确认pip安装的完整过程和是否存在隐藏报错。

额外验证点

  • 确认/home/ec2-user/venv目录的所有者为ec2-user,权限设置为755,避免CodeDeploy执行时无权限访问。
  • 检查CodeDeploy代理日志(/var/log/aws/codedeploy-agent/codedeploy-agent.log),查看脚本执行阶段是否有报错信息。

内容的提问来源于stack exchange,提问作者Pring

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 08:32:07