GitHub Action执行CDK deploy时找不到frontend/build资产的问题
解决方案:GitHub Actions中CDK Deploy找不到Build目录资产
可能的原因及对应解决步骤
1. 检查GitHub Runner的工作目录是否正确
GitHub Actions的默认工作目录是$GITHUB_WORKSPACE,如果项目存在嵌套子目录结构,容易出现路径解析错误:
- 在工作流中添加调试步骤,确认当前目录:
- name: Check current directory run: pwd - 执行
cdk deploy前显式切换到正确的项目根目录:- name: Switch to project root run: cd $GITHUB_WORKSPACE/CDK_Test
2. 确认Build目录已被正确推送到GitHub仓库
即使本地执行了npm run build,如果.gitignore包含build/或dist/规则,Build目录会被忽略无法推送到远程:
- 检查项目根目录和
frontend/frontendapp下的.gitignore文件,移除对build/的忽略规则; - 直接在GitHub仓库对应分支中查看
frontend/frontendapp/build目录是否存在,确认所有产物文件已提交。
3. 在GitHub Actions中重新执行Build步骤
本地Build产物可能和GitHub Runner环境(系统架构、依赖版本)存在差异,建议在工作流中直接生成Build产物:
- name: Install frontend dependencies working-directory: ./frontend/frontendapp run: npm install - name: Build frontend assets working-directory: ./frontend/frontendapp run: npm run build - name: Deploy with CDK run: cdk deploy --all --require-approval never
4. 修正CDK代码中的资产路径定义
如果CDK代码使用绝对路径指向Build目录,在Runner环境下必然失效,需改为基于项目根目录的相对路径:
- 错误示例(绝对路径):
const frontendAsset = new Asset(this, 'FrontendAsset', { path: '/Users/xxx/CDK_Test/frontend/frontendapp/build' }); - 正确示例(基于文件目录的相对路径):
import * as path from 'path'; const frontendAsset = new Asset(this, 'FrontendAsset', { path: path.join(__dirname, '../frontend/frontendapp/build') });
或者直接使用项目根目录相对路径:./frontend/frontendapp/build
5. 排查缓存或清理步骤的干扰
- 如果工作流配置了npm缓存,尝试暂时禁用缓存,避免旧依赖导致Build失败;
- 检查是否有lint、测试等步骤误删了Build目录文件,确保Build步骤在这些操作之后执行。
内容的提问来源于stack exchange,提问作者Awais Nisar
相关产品推荐
相关产品推荐

