Почему продолжительность процесса сборки Cloud Build для ASP.NET Core & Angular так велика? - PullRequest
1 голос
/ 24 мая 2019

Проект ASP.NET Core API с Angular можно создать менее чем за одну минуту на локальном компьютере, но когда я использую триггер сборки Google Cloud Builder, чтобы автоматизировать процесс, он занимает вечность. Я устанавливаю cloudbuild.yaml следующим образом. В проекте используются .NET Core 2.2 и Angular. Что я могу сделать, чтобы Cloud Build снова заработал?

Я попытался изменить файл CloudBuild.yaml, например, увеличить время ожидания, но это тоже не помогло.

Это cloudbuild.yaml, используемый для развертывания приложения в AppEngine Flexible. Сначала он устанавливает зависимости Angular, затем создает его, публикует API и развертывает приложение.

steps:
# run npm install for Angular
- name: 'gcr.io/cloud-builders/npm'
  args: ['install']
  dir: 'PPlus.Web/ClientApp'
# build Angular for production
- name: 'gcr.io/cloud-builders/npm'
  args: ['run', 'build','--','--prod']
  dir: 'PPlus.Web/ClientApp'
# publish asp.net core solution  
- name: microsoft/dotnet:2.2-sdk
  args: ['dotnet', 'publish','-c','Release']
# deploy the webapi to the AppEngine
- name: gcr.io/cloud-builders/gcloud
  args: ['app', 'deploy', 
'./PPlus.Web/bin/Release/netcoreapp2.2/publish/app.yaml','--version','staging']
timeout: 1800s

Поскольку для сборки в локальном режиме требуется несколько секунд, в Cloud Builder это не займет более нескольких минут.

В журналах Cloud Build отображается только сообщение с указанием времени ожидания, но чем больше я увеличиваю ограничение времени ожидания, тем больше времени требуется без завершения.

1 Ответ

0 голосов
/ 25 мая 2019

Чтобы сократить время, необходимое для разрешения зависимостей NPM, прежде всего включите в package.json в dependencies только зависимости, необходимые для вашей сборки, а оставшиеся оставьте в devDependencies.

Во-вторых, если среда, в которой вы развертываете проект, совпадает с вашей средой разработки, создайте и включите в свой репозиторий package-lock.json.

Теперь вы можете запустить npm ci --only=prod вместо npm install.

Это позволит пропустить расчет и выборку зависимостей и сразу же начать получать те, которые вам нужны.

Это значительно уменьшает разрешение зависимостей модуля NPM.

Теперь о продуктах. построить вопрос. Иногда процесс Node не выделяет достаточно ресурсов, процесс останавливается и не обеспечивает обратную связь.

Попробуйте запустить это вместо npm run build --prod

node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng build --prod

Надеюсь, это поможет!

...