AWS CodePipeline部署前未提取工件问题排查与配置求助
解决方案:AWS CodePipeline S3部署未解压工件及CodeBuild错误修复
一、解决直接用AWS Commands构建时S3不解压的问题
问题根源:你在构建阶段生成了project.zip,而CodePipeline的每个阶段输出的工件本身就是一个压缩包。此时S3部署的Extract files before deploy选项只会解压CodePipeline传递的BuildArtifact压缩包,得到里面的project.zip文件,不会再二次解压这个zip。
修正方案:
- 移除构建阶段的
zip -r project.zip ./project命令 - 修改AWS Commands动作的输出工件配置,直接指定包含
./project/**/*(即project目录下所有文件) - 这样
BuildArtifact会包含project目录的所有文件,S3部署时勾选Extract files before deploy就会把这些文件直接解压到存储桶中
二、改用CodeBuild时的错误修复及正确配置
1. 修复CLIENT_ERROR: git fetch failed with exit status 128
这个错误是CodeBuild尝试直接拉取GitHub代码时权限不足导致的,正确做法是让CodePipeline传递源工件给CodeBuild,而非让CodeBuild自行拉取:
- 在CodeBuild项目的源设置中,选择
CodePipeline作为源类型,不要选GitHub - 这样CodeBuild会直接使用CodePipeline源阶段传递的
SourceArtifact,无需再执行git拉取,避免权限问题
2. 修复Unsupported field "on-failure" in buildspec
你提供的buildspec.yml本身没有问题,错误来自CodeBuild项目的配置:
- 进入CodeBuild项目的构建规范设置,确保选择
Use a buildspec file,且没有在自定义输入框中添加额外的字段(比如on-failure) - 确认仓库根目录的
buildspec.yml内容正确,没有残留的on-failure字段
3. 适配S3解压需求的正确buildspec
如果用CodeBuild,无需手动生成zip,直接输出project目录的内容即可:
version: 0.2 phases: build: commands: # 这里可以添加你的实际构建命令(比如编译、测试等),如果不需要则保留echo或留空 - echo "Build process completed" artifacts: files: - project/**/*
配置完成后,CodeBuild输出的BuildArtifact会包含project目录下的所有文件,S3部署时勾选Extract files before deploy就会自动将这些文件解压到存储桶中。
内容的提问来源于stack exchange,提问作者zayaanra
相关产品推荐
相关产品推荐

