如何解决Cloud Build仅服务于React的build文件夹
我是Google Cloud的新手,我正在努力在简单的MERN堆栈应用程序上实现CI / CD。
我能够设置Google Cloud构建并使用自动触发器(来自github分支)来进行部署。 我只有一个问题:在cloudbuild.yaml文件中,我插入了几个步骤,首先进行npm安装,然后进行npm构建,最后进行部署。该过程非常缓慢,并且还将所有代码复制到服务器,而不仅仅是复制到构建文件夹。
我想了解如何配置文件以能够使用github存储库中已经存在的build文件夹并直接进行部署,而无需进一步的步骤。 在我使用react的前端,我唯一要做的就是提供静态index.html文件。
这是我当前的配置(只有前端,可以理解)
steps:
# Step 0: FRONTEND npm install
- name: "gcr.io/cloud-builders/npm"
dir: 'frontend'
args: ['install']
timeout: "5m"
# Step 1: FRONTEND optimized build
- name: "gcr.io/cloud-builders/npm"
dir: 'frontend'
args: ["run","build"]
timeout: "5m"
# Step 2: FRONTEND Deploy cloud app frontend
- name: "gcr.io/cloud-builders/gcloud"
args: ["app","deploy","-v","0-1-2","app.yaml"]
dir: 'frontend'
timeout: "20m"
timeout: 60m
在我的远程存储库中,我已经可以使用构建文件夹了,但是我不知道该怎么做。
我也尝试过类似的方法: Upload build folder in Google Cloud Build 没有成功。
问题之一是,在该过程结束时,云构建似乎正在尝试启动npm start。
最后,我目前正在使用express来简单地提供静态文件。 使用Google Cloud可以避免使用它,而只是从app.yaml文件配置处理程序吗? 如果我不实施Express,它会在后台使用什么Web服务器来提供文件?
解决方法
如果您只需要部署build文件夹,那么您提供的链接就可以完成任务。除非您要复制所有代码并使用Cloud Build创建构建文件夹,否则无需运行npm install
和npm run build
。
Credits到@Guillaume(已更新,假设.yaml文件位于项目的根目录中,而build
位于名为{{1}的目录中}):
frontend
默认情况下,Cloud Build使用名为steps:
# Step 0: FRONTEND copy only build and deploy cloud app frontend
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: bash
dir: 'frontend'
args:
- '-c'
- |
cd ..
cp app-production-build.yaml frontend/build
cd frontend/build
gcloud app deploy
timeout: '1600s'
的目录作为工作目录。如果在构建步骤中设置了dir字段,则工作目录将设置为/workspace
。基本上,对于此构建步骤,Cloud Build当前位于项目/存储库根目录中名为/workspace/<dir>
的目录中。
正如Guillaume所提到的,您需要更新您的 app.yaml URL处理程序,此功能才能正常工作。我在new React app的build文件夹中测试了此样本,它对我有用:
frontend
要回答最后一个问题,您可以直接从应用中提供静态文件,而您需要做的是配置URL处理程序,例如static_dir
或static_files
。
请注意,runtime: nodejs12
service: frontend-react
handlers:
# Serve all static files with url ending with a file extension
- url: /(.*\..+)$
static_files: \1
upload: (.*\..+)$
# Catch all handler to index.html
- url: /.*
static_files: index.html
upload: index.html
中的每个文件都是cached,以提高性能,因此每进行几次部署都可能会有延迟。
Node.js根本不使用任何网络服务器,您必须通过在package.json中指定它来进行设置。这是Google文档推荐的some web frameworks。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。