AWS CodeBuild产物缺失文件问题排查求助
AWS CodeBuild构建后Artifact缺失指定asset文件问题排查与解决
问题描述
在单体仓库(MonoRepo)中使用AWS CodeBuild构建CDK应用至dist目录,构建阶段执行ls ./path/to/dist命令时,能确认asset.1ebc9d3ac2033816c4abb63e4afd69d350b4aba8704cc9236b82ea520b74f4b0文件存在,但最终生成的Artifact中该文件缺失。
Buildspec配置
{ "version": "0.2", "phases": { "install": { "runtime-versions": { "nodejs": "latest" }, "commands": [ "n lts", "npm i -g npm@latest", "npm ci" ] }, "build": { "commands": [ "npm run build-front-end", "ls ./path/to/dist" ] } }, "artifacts": { "files": [ "path/to/dist/**/*" ] }, "cache": { "paths": [ "/root/.npm/**/*" ] } }
构建阶段ls输出
DataStore.assets.json DataStore.template.json FrontEnd.assets.json FrontEnd.template.json Pipeline.assets.json Pipeline.template.json asset.1ebc9d3ac2033816c4abb63e4afd69d350b4aba8704cc9236b82ea520b74f4b0 asset.3fb6287214999ddeafa7cd0e3e58bc5144c8678bb720f3b5e45e8fd32f333eb3.zip asset.5bc602ecde93c947efe5899ae355f999986a1acbe610b1c0b9c468d738857555 asset.6f15086578588c0f5f1cd712f8bb5688927f8e58e010630bfb53ec48a992dcc0 asset.7b1448c18435e2a9fd6dd739b24710af12127e39ce6a360d0e54584c57aec679 asset.9eb41a5505d37607ac419321497a4f8c21cf0ee1f9b4a6b29aa04301aea5c7fd asset.b7f33614a69548d6bafe224d751a7ef238cde19097415e553fe8b63a4c8fd8a6 asset.faa3f939bd2f560adff4a880c2543a9c501ca978205ba00428f1a6ec00bad206 cdk.out manifest.json tree.json
最终Artifact内容
DataStore.assets.json DataStore.template.json FrontEnd.assets.json FrontEnd.template.json Pipeline.assets.json Pipeline.template.json asset.3fb6287214999ddeafa7cd0e3e58bc5144c8678bb720f3b5e45e8fd32f333eb3.zip asset.5bc602ecde93c947efe5899ae355f999986a1acbe610b1c0b9c468d738857555 asset.6f15086578588c0f5f1cd712f8bb5688927f8e58e010630bfb53ec48a992dcc0 asset.7b1448c18435e2a9fd6dd739b24710af12127e39ce6a360d0e54584c57aec679 asset.9eb41a5505d37607ac419321497a4f8c21cf0ee1f9b4a6b29aa04301aea5c7fd asset.b7f33614a69548d6bafe224d751a7ef238cde19097415e553fe8b63a4c8fd8a6 asset.faa3f939bd2f560adff4a880c2543a9c501ca978205ba00428f1a6ec00bad206 cdk.out manifest.json tree.json
排查方向与解决方案
1. 检查文件是否为符号链接
缺失的asset文件无后缀,大概率是符号链接。AWS CodeBuild默认不会打包符号链接,需配置跟随符号链接:
- 先在build阶段添加命令验证文件类型:
若输出开头为ls -l ./path/to/dist/asset.1ebc9d3ac2033816c4abb63e4afd69d350b4aba8704cc9236b82ea520b74f4b0l,说明是符号链接。 - 修改buildspec的artifacts配置:
"artifacts": { "files": [ "path/to/dist/**/*" ], "symlinks": "follow" }
2. 确认文件在打包前未被修改
ls执行后到Artifact打包前,可能有进程删除或移动了该文件。在build阶段末尾添加检查命令:
sleep 5 ls -l ./path/to/dist/asset.1ebc9d3ac2033816c4abb63e4afd69d350b4aba8704cc9236b82ea520b74f4b0
同时查看CodeBuild日志中build阶段结束到artifacts打包阶段的内容,排查是否有异常操作。
3. 显式指定缺失文件
尝试在artifacts的files列表中显式添加该文件,验证通配符是否匹配问题:
"artifacts": { "files": [ "path/to/dist/**/*", "path/to/dist/asset.1ebc9d3ac2033816c4abb63e4afd69d350b4aba8704cc9236b82ea520b74f4b0" ] }
4. 禁用缓存重试
缓存可能导致文件状态异常,临时禁用缓存重新构建:
"cache": { "paths": [] }
内容的提问来源于stack exchange,提问作者Mercury
相关产品推荐
相关产品推荐

