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 分钟。
尝试构建 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 云存储缓存目录
- 使用自定义虚拟机大小
- 避免上传不必要的文件
经过多次尝试不同的解决方案后,我找到了一个可行的方法:感谢
在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 分钟。