CodePipeline获取错误构件?CodeBuild未传递指定目录产物问题咨询
问题排查及解决方案
你遇到的CodeBuild输出产物不符合预期的问题,可以按以下步骤排查修改:
- 修正
buildspec.yml的artifacts配置
你当前配置中的discard-paths: yes会将base-directory下所有匹配到的文件全部平铺到产物根目录,不会保留原有的目录结构,极易导致EB部署时识别目录异常。可以将该配置移除或显式设为no,保留发布文件的原有目录结构,修改后的完整配置参考:
version: 0.2 phases: pre_build: commands: - dotnet restore - dotnet build build: commands: - dotnet publish -c Release -r linux-x64 -o ./output --self-contained false # 新增output目录内容打印,确认发布产物生成正确 - ls ./output artifacts: files: - '**/*' base-directory: ./output discard-paths: no
- 检查CodePipeline阶段配置
如果修改buildspec后问题依旧,大概率是Pipeline的阶段引用错误:
- 确认Deploy(部署到EB)阶段引用的输入工件是Build阶段的输出工件,而非Source阶段的输出工件(Source阶段输出的就是代码仓库根目录内容,和你遇到的异常表现一致)
- 确认CodeBuild项目的buildspec路径配置正确,默认读取代码根目录的
buildspec.yml,如果你的文件存放在子目录,需要在CodeBuild项目配置中指定对应路径。
- 产物验证
可以直接在CodeBuild的历史构建记录中下载对应构建的产物压缩包,解压查看内容是否为./output目录下的发布产物,即可快速定位问题是出在CodeBuild的构建配置,还是Pipeline的阶段引用配置。
内容的提问来源于stack exchange,提问作者Ivor
相关产品推荐
相关产品推荐

