AWS CodeDeploy脚本无法找到ROOT.war源文件问题求助
问题排查与解决方案
1. 钩子执行顺序是核心问题
AWS CodeDeploy的钩子执行顺序是固定的:ApplicationStop → BeforeInstall → 文件复制(files段配置) → AfterInstall → ApplicationStart
你的BeforeInstall阶段调用的scripts/copy_server脚本试图访问/home/ubuntu/artifacts/ROOT.war,但这个时候CodeDeploy还没执行files段的文件复制操作,目标路径下根本没有这个文件,自然找不到。
解决方法:
把需要访问已复制文件的脚本移到AfterInstall阶段,或者调整脚本逻辑,不要在BeforeInstall里依赖还未复制的文件。
2. 压缩包结构验证
确认你上传到S3的压缩包结构是否符合预期:
- 解压压缩包后,应该直接在根目录看到
ROOT.war、appspec.yml和scripts文件夹,而不是被嵌套在某个子文件夹里(比如my-app/ROOT.war这种结构)。 - 如果压缩包是嵌套结构,比如文件都在
my-app文件夹下,你需要修改files的source路径为./my-app/ROOT.war,否则CodeDeploy找不到源文件。
验证方式:
下载S3里的压缩包到本地解压,检查文件层级是否正确。
3. 目标目录存在性确认
虽然你排除了权限问题,但可以确认/home/ubuntu/artifacts/目录是否存在:
- 如果目录不存在,CodeDeploy默认会自动创建,但如果有特殊权限配置导致创建失败,也会出现文件无法写入的情况。
- 可以在
BeforeInstall阶段添加脚本先创建目标目录:mkdir -p /home/ubuntu/artifacts/
内容的提问来源于stack exchange,提问作者swapnilman
相关产品推荐
相关产品推荐

