AWS CodePipeline构建Java WAR包至Elastic Beanstalk失败排查求助
AWS CodeBuild 工件上传失败排查步骤
1. 先排除mv命令的干扰
暂时修改buildspec.yml,去掉post_build阶段的移动命令,直接上传Maven生成的原始WAR包,验证基础上传是否正常:
version: 0.2 phases: install: runtime-versions: java: corretto11 build: commands: - mvn clean install artifacts: files: - target/MyApp-1.0.war
运行构建后,去对应的S3桶里查找target/MyApp-1.0.war路径下的文件,如果能找到,说明问题出在mv命令或后续路径配置。
2. 增加日志确认文件存在性
在buildspec.yml中添加目录查看命令,确认每个阶段的文件状态:
version: 0.2 phases: install: runtime-versions: java: corretto11 build: commands: - mvn clean install - ls -la target/ # 确认WAR包生成位置 post_build: commands: - mv target/MyApp-1.0.war ROOT.war - ls -la # 确认ROOT.war是否在当前工作目录 artifacts: files: - ROOT.war
查看CodeBuild日志中的ls输出,确认ROOT.war确实存在于当前工作目录,避免因为路径错误导致工件找不到。
3. 检查CodeBuild工件上传日志
CodeBuild在post_build阶段结束后,会有专门的工件上传日志段,重点查看以下内容:
- 是否出现
No matching artifacts found错误 - 工件上传的目标S3桶和路径是否与你预期一致
- 有没有权限相关的报错(比如CodeBuild角色没有S3写入权限)
4. 修正工件路径配置
如果mv命令后ROOT.war不在当前工作目录(比如当前工作目录不是src),可以用绝对路径或者通配符匹配:
artifacts: files: - **/ROOT.war # 匹配所有子目录下的ROOT.war
或者直接指定绝对路径(从日志中获取的生成路径):
artifacts: files: - /codebuild/output/src1021125740/src/ROOT.war
5. 验证CodeBuild服务角色权限
确认CodeBuild使用的服务角色已附加包含以下权限的策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject" ], "Resource": "arn:aws:s3:::你的工件桶名/*" } ] }
6. 检查CodePipeline输出配置
确认CodePipeline中CodeBuild阶段的输出工件配置:
- 目标S3桶是否正确
- 工件前缀是否填写错误(比如多加了不必要的路径)
内容的提问来源于stack exchange,提问作者Michael Cropper
相关产品推荐
相关产品推荐

