Cloud Build构建Angular应用执行npm run时报package.json错误
问题根因
Cloud Build拉取Source Repository的代码后,默认把/workspace作为所有构建步骤的执行目录,所有命令都会直接在这个路径下跑。你的package.json放在二级子目录里,命令自然扫不到:
- 第一步的
yarn install实际是在空的/workspace根目录执行的,只生成了个空的锁文件,根本没安装项目依赖,日志里的"success Saved lockfile"是假成功,不是真的装完了依赖 - 第二步跑构建命令时,还是在根目录找
package.json,找不到就直接抛错了
修复方案
给每个构建步骤加dir字段,指定package.json所在的相对路径就行——路径填相对于仓库根目录的位置,比如你的Angular项目在仓库根目录下的client/web二级目录,就填这个值。
修正后的cloudbuild.yaml参考:
steps: - name: gcr.io/cloud-builders/npm args: - install id: Install angular entrypoint: yarn # 替换成你自己存放package.json的二级目录实际路径 dir: client/web - name: gcr.io/cloud-builders/npm args: - run - build - '--prod' id: Create build entrypoint: yarn # 和上一步用相同的工作目录 dir: client/web
踩坑提醒
- Cloud Build每个构建步骤都跑在独立容器里,别想着在某一步用
cd切目录后让后面的步骤继承路径,切目录的操作只对当前步骤里的命令生效 - 后续如果要加部署步骤(比如传到Firebase Hosting、Cloud Storage之类的),只要步骤需要读构建出来的
dist产物,要么给步骤配同样的dir,要么写对产物的完整路径,不然还会报找不到文件的错
内容的提问来源于stack exchange,提问作者Anupam
相关产品推荐
相关产品推荐

