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

AWS Elastic Beanstalk Linux2平台predeploy钩子克隆文件失效求助

问题

在Linux 2平台运行AWS Elastic Beanstalk应用时,部署阶段需要克隆GitHub仓库获取应用配置文件,于是创建了/.platform/hooks/predeploy/01_import钩子脚本,想让应用启动前文件就准备好。但部署后发现:

  • predeploy钩子确实执行了(日志里能看到echo输出)
  • /var/app/current/config目录下找不到克隆的文件
  • 把完全一样的脚本放到postdeploy钩子里,文件就能正常生成

脚本内容如下:

#!/bin/bash
mkdir /var/app/current/config
echo Adding github in known hosts
ssh-keyscan -H github.com >> /home/webapp/.ssh/known_hosts
echo Done Adding github in known hosts
echo deleting old flows
echo cloning 
git -c core.sshCommand="ssh -i /etc/pki/tls/certs/githubKey" clone -b dev --single-branch <mygithub> /var/app/current/config
echo done cloning 
原因分析

AWS Elastic Beanstalk Linux 2平台的部署流程里,predeploy钩子的执行时机是应用版本解压到临时目录后,但还没把这个目录替换成/var/app/current之前。这时候你操作的/var/app/current其实是上一个版本的目录,等部署完成,新的/var/app/current会被替换成临时解压的目录,之前克隆的文件自然就被覆盖掉了,所以最终看不到。

而postdeploy钩子是在Elastic Beanstalk完成应用版本部署(也就是/var/app/current已经更新为新版本目录)之后执行的,这时候修改/var/app/current里的内容不会被后续流程覆盖,所以文件能正常保留。

解决方案

如果必须在应用启动前完成配置文件克隆,别直接操作/var/app/current,而是操作Elastic Beanstalk的临时部署目录。这个目录的路径可以通过环境变量$EB_APP_STAGING_DIR获取,修改后的脚本如下:

#!/bin/bash
# 操作临时部署目录,而非/var/app/current
TARGET_DIR="$EB_APP_STAGING_DIR/config"
mkdir -p "$TARGET_DIR"
echo Adding github in known hosts
ssh-keyscan -H github.com >> /home/webapp/.ssh/known_hosts
echo Done Adding github in known hosts
echo cloning 
git -c core.sshCommand="ssh -i /etc/pki/tls/certs/githubKey" clone -b dev --single-branch <mygithub> "$TARGET_DIR"
echo done cloning 

这样在predeploy钩子中把文件克隆到临时目录,后续部署流程会把这个临时目录的内容同步到/var/app/current,应用启动时就能看到配置文件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:10:47