如何将CodeBuild构建产物上传至S3存储桶根目录
问题原因与解决方法
核心问题
你遇到的构建产物被存入仓库名子目录的情况,主要来自两个配置层面的问题:
- CodeBuild Artifacts的前缀设置:从你的配置截图来看,Artifacts部分指定了**Prefix(前缀)**为仓库名称,CodeBuild会自动把构建产物上传到S3的这个前缀目录下。
- Angular构建输出路径偏差:Angular 16执行
ng build --configuration production后,产物默认会生成在dist/[你的项目名称]子目录里,而非dist根目录。你当前的BUILD_FOLDER设为dist,导致s3 sync命令把整个dist目录(包含项目名子目录)同步到S3,叠加Artifacts的前缀就会出现多余层级。
解决步骤
方法1:调整CodeBuild Artifacts配置
进入你的CodeBuild项目配置页面,找到「Artifacts」部分:
- 如果你不需要CodeBuild自动上传产物(已经在buildspec里用
aws s3 sync手动上传),直接选择No artifacts并保存配置。 - 若要保留Artifacts上传,清空Prefix字段,CodeBuild就会把产物传到S3根目录。
方法2:修正buildspec的构建目录指向
修改buildspec中的BUILD_FOLDER变量,指向Angular实际的输出子目录:
variables: CACHE_CONTROL: "86400" # 替换成你的Angular项目名称,比如"my-angular-app" BUILD_FOLDER: "dist/你的项目名称"
或者在post_build的sync命令里动态获取子目录:
aws s3 sync ${BUILD_FOLDER}/$(ls -1 ${BUILD_FOLDER}) s3://${S3_BUCKET} --delete
这样就能直接把项目构建产物同步到S3根目录,不会带出多余层级。
额外注意
不要同时使用CodeBuild Artifacts自动上传和buildspec里的aws s3 sync,两者选其一即可,避免重复上传或路径冲突。
内容的提问来源于stack exchange,提问作者Mikita Melnikau
相关产品推荐
相关产品推荐

