为什么 Cloud Build for ASP.NET Core & Angular 的构建过程持续时间如此之长?



一个带有 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

希望对您有所帮助!

相关内容

  • 没有找到相关文章

最新更新