Google Angularfire项目的Cloud Build超时

Google Cloud Build of Angularfire project times out

尝试构建 angular + firebase 项目的产品构建时,它总是超时。我看到它快完成了,但是构建 angular 应用程序的生产版本的步骤已经超过 8 分钟。 在本地构建时只需 50 秒。

cloud build steps image

这些是我在 cloudbuild.yaml 中使用的步骤:

steps:
##########
# FUNCTIONS
##########
# Install
- name: 'gcr.io/cloud-builders/npm:node-10.10.0'
  args: ['install']
  dir: 'functions'

##########
# HOSTING
##########
# Install
- name: 'gcr.io/cloud-builders/npm:node-10.10.0'
  args: ['install']
  dir: 'hosting'
# Build
- name: 'gcr.io/cloud-builders/npm:node-10.10.0'
  args: ['run', 'build', '--', '--prod=$_IS_PRODUCTION']
  dir: 'hosting'
  env:
    - some environment variables here containing api keys etc...

##########
# DEPLOY
##########
- name: 'gcr.io/$PROJECT_ID/firebase'
  args: ['deploy', '-P', '$_BUILD_LINE']

非生产构建工作正常,总共只占用 4 分钟(所有步骤)。

知道为什么 angular 产品构建的云构建需要这么长时间吗?我该如何减少它?

@lunu 我对此进行了调查并在此处复制了您的问题这是我的分析:

  • 步骤的默认超时为 10 分钟
  • 由于构建过程分为多个步骤,每个步骤都会复制上一步生成的资产。
  • 我怀疑第 2 步超时是因为它复制了很多文件,我猜它们的大小很大。

我建议以这种方式将 “timeout” option 添加到构建步骤中:

# Build
- name: 'gcr.io/cloud-builders/npm:node-10.10.0'
  args: ['run', 'build', '--', '--prod=$_IS_PRODUCTION']
  timeout: 900s
  dir: 'hosting'
  env:
    - some environment variables here containing api keys etc…

我把它放在这里 900 秒也就是 15 分钟你可以改变它以满足你的需要。

无论如何,如果构建花费这么多时间,有一些 best practices 需要考虑:

  • 构建更精简的容器
  • 使用 Kaniko 缓存
  • 使用缓存的 Docker 图片
  • 使用 Google 云存储缓存目录
  • 使用自定义虚拟机大小
  • 避免上传不必要的文件

经过多次尝试不同的解决方案后,我找到了一个可行的方法:感谢 关于 "every step copy the assets that produced from the previous step" 我修改了构建以安装所有依赖项,然后 运行 构建一步到位:

在package.json中添加脚本:

"build-from-scratch": "npm install && npm run build"

然后在cloudbuild.yaml中执行这个脚本:

- name: 'gcr.io/cloud-builders/npm:node-10.10.0'
  args: ['run', 'build-from-scratch', '--', '--prod=$_IS_PRODUCTION']
  timeout: 600s
  dir: 'hosting'

由于现在不必将 npm 模块从安装复制到构建步骤,因此构建现在只需约 3 分钟。