一个带有 Angular 的 ASP.NET Core API 项目可以在不到一分钟的时间内在本地机器中构建,但是当我使用 Google Cloud Builder 的构建触发器来自动化该过程时,它需要很长时间。我正在设置cloudbuild.yaml,如下所示。该项目使用 .NET Core 2.2 和 Angular。我该怎么做才能让云构建再次正常运行?
我试图修改CloudBuild.yaml文件,比如增加超时,这也无济于事。
这是用于将应用程序部署到 AppEngine Flexible 的 cloudbuild.yaml。它首先安装 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 Build 的日志只显示一条指示超时的消息,但我越增加超时限制,没有完成所需的时间就越多。
为了减少需要解析 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
希望对您有所帮助!