【问题标题】:Google Cloud Build of Angularfire project times outAngularfire 项目的 Google Cloud Build 超时
【发布时间】:2020-02-03 10:47:11
【问题描述】:

当尝试构建 Angular + firebase 项目的 prod 构建时,它总是超时。我看到它快完成了,但是构建 Angular 应用程序的 prod 版本的步骤已经占用了 > 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 prod 构建的云构建需要这么长时间以及如何减少它?

【问题讨论】:

  • 嘿 luhu,我无法仅从代码中判断构建超时的原因。您能否提供您可以在 Cloud Build 页面中找到的构建详细信息以查看问题所在?
  • 嗨 Nahuel,没有真正的错误消息,prod 构建只需要很长时间(> 8 分钟),然后 10 分钟超时停止构建:Screenshot 是否有任何其他细节可以帮助调查这个?

标签: angular angularfire google-cloud-build


【解决方案1】:

在尝试了很多不同的解决方案后,我发现了一个可行的方法:感谢Methkal Khalawi's hint 关于“每一步都复制上一步生成的资产”我修改了构建以安装所有依赖项,然后运行构建一步到位:

在 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 分钟。

【讨论】:

    【解决方案2】:

    @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 Cloud Storage 缓存目录
    • 使用自定义虚拟机大小
    • 避免上传不必要的文件

    【讨论】:

    • 感谢您的提示!不幸的是,大部分都没有帮助,例如现在超时限制为 600 秒。构建缓存的 docker 容器等肯定会有所帮助,但对于这样一个在我的本地机器上只需要 50 秒的小项目,付出努力是不值得的。但我现在找到了解决方案并发布在stackoverflow.com/a/58491711/3920200
    猜你喜欢
    • 2017-08-01
    • 2020-01-14
    • 1970-01-01
    • 2020-11-01
    • 2021-03-27
    • 2020-10-16
    • 2020-02-20
    • 2019-02-09
    • 2021-01-21
    相关资源
    最近更新 更多