Google Cloud Builds, Как ускорить время сборки приложения (пакеты npm)

Мое веб-приложение работает в Google Cloud Platform, в последнее время я понял, что время сборки приложения занимает очень много времени, особенно когда вы тестируете функцию, скажем, обновляете страницу, вы можете видеть, что запуск приложения занимает очень много времени. Я ищу способ ускорить этот процесс. Я использую образы докеров для создания облачного реестра Google. Я не хочу каждый раз заново собирать все пакеты npm, когда в некоторых пакетах npm есть обновление, тогда я хочу пересобрать приложение.

вот мой файл cloudbuild.yaml для полимера

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/myapp-polymer', '.' ]
images:
- 'gcr.io/$PROJECT_ID/myapp-polymer'

тогда вот мой основной файл cloudbuild.yaml

steps:
- name: 'gcr.io/cloud-builders/npm'
  args: ['--prefix', 'myapp','install']
- name: 'gcr.io/cloud-builders/npm'
  args: ['--prefix', 'myapp/functions', 'install']
- name: 'gcr.io/$PROJECT_ID/myapp-polymer'
  args: ['cd', 'myapp']
- name: 'gcr.io/$PROJECT_ID/myapp-polymer'
  args: ['build']

Я читал Google Cloud API, особенно раздел «Ускорение ваших сборок» (https://cloud.google.com/cloud-build/docs/speeding-up-builds)

Я думаю, что он просто кеширует образы сборки и использует их. Есть ли способ, которым я могу кэшировать конкретно пакеты npm, зависимости и т. Д. В Google Cloud, чтобы мне не приходилось каждый раз создавать целое приложение? Моя основная цель - сократить время сборки, ускорить процесс сборки.

Спасибо!


person Erman Tatar    schedule 06.11.2018    source источник
comment
ты нашел как это правильно сделать?   -  person Jean Guzman    schedule 29.08.2019


Ответы (2)


Вы пробовали Kaniko? Он может сохранить кеш в gcr.io и, если вы правильно создали файл Dockerfile (см. https://cloud.google.com/blog/products/gcp/7-best-practices-for-building-container), это должно сэкономить вам много времени. Вот пример cloudbuild.yaml:

- name: 'gcr.io/kaniko-project/executor:latest'
  args:
  - --destination=gcr.io/$PROJECT_ID/image
  - --cache=true
  - --cache-ttl=XXh

Дополнительная информация: https://cloud.google.com/cloud-build/docs/kaniko-cache

person ttfreeman    schedule 24.11.2019

Вы можете использовать докер.

Поместите свое приложение npm в докер. Затем вы можете отправить свой образ докера (загрузить несколько слоев образа докера) в облачный реестр, например gcr (Google Cloud Registry). Перед этапом сборки вы можете извлечь свое изображение из gcr.

Примерно так будет выглядеть этап сборки:

- name: 'gcr.io/cloud-builders/docker'
  args: [
          'build',
          '-t', 'test_image',
          '-f', 'Dockerfile',
          '.'
        ]
  id: 'build_test_image'
person markushinsche    schedule 08.11.2018
comment
Привет @markushinsche, Спасибо за ответ! Я фактически разместил свое приложение в докере, и я хочу попробовать это перед этапом сборки в основном googlebuild.yaml, я хочу сравнить файлы package.json. Если обновления нет, я не хочу снова устанавливать все пакеты npm. Но я не знаю, как сравнивать файлы package.json вне докера и внутри докера. Я хочу запустить свой файл javascript и отправить ему два пакета package.json, чтобы проверить, равны ли они, затем я хочу создать изображение npm i cache или npm install - зависит от условного результата. В файле докеров, как ЗАПУСКАТЬ, если еще команды ЗАПУСКА :( - person Erman Tatar; 08.11.2018