Google App Engine 没有部署两个服务(似乎在互相覆盖)

Google App Engine does not deploy two services (seem to be overriding each other)

我有一个 Django 后端 和一个 Angular 前端,我正在尝试将它们都部署到Google App Engine 标准 应用作为同一应用中的两项服务。

目录如下所示:

-backend
--cloudbuild.yaml
--app.yaml
-- ...
-frontend
--cloudbuild.yaml
--app.yaml
-- ...
-cloudbuild.yaml

主要 cloudbuild.yaml 遍历每个文件夹并查找 cloudbuild.yaml 文件并提交构建:

steps:
- name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  args:
  - '-c'
  - |
    for d in */; do
      config="${d}cloudbuild.yaml"
      if [[ ! -f "${config}" ]]; then
        continue
      fi

      echo "Building $d ... "
      (
        gcloud builds submit $d --config=${config}
      ) &
    done
    wait

当我将代码推送到我的 Github 存储库时,它们 成功部署 。但是,两个日志都显示如下内容:

Step #2: Beginning deployment of service [default]...
Step #2: #============================================================#
Step #2: #= Uploading 0 files to Google Cloud Storage =#
Step #2: #============================================================#
Step #2: File upload done.
Step #2: Updating service [default]...
Step #2: ................................done.
Step #2: Setting traffic split for service [default]...
Step #2: .....done.
Step #2: Deployed service [default] to [https://thisapp.appspot.com]

所以看起来其中一个正在覆盖另一个作为默认服务。当我转到服务页面时,只有一项服务是默认服务。

我知道我们必须先部署默认服务,然后再部署其余服务。但是我认为既然主 cloudbuild.yaml 一个一个提交构建,那么就会有一个默认服务,第二个构建将创建第二个服务。

另外两个cloudbuild.yaml文件如下:

steps:

  # Install node packages
  - name: 'gcr.io/cloud-builders/npm'
    args: [ 'install' ]

  # Build productive files
  - name: 'gcr.io/cloud-builders/npm'
    args: [ 'run', 'build', '--prod']

  # Deploy to google cloud app egnine
  - name: 'gcr.io/cloud-builders/gcloud'
    args: ['app', 'deploy', '--version=prod']
steps:

  - name: 'python:3.7'                                                                                                                               
    entrypoint: python3                                                               
    args: ['-m', 'pip', 'install', '-t', '.', '-r', 'requirements.txt'] 

  - name: 'python:3.7'                                                            
    entrypoint: python3                                                           
    args: ['./manage.py', 'collectstatic', '--noinput']

  - name: 'gcr.io/cloud-builders/gcloud'
    args: ['app', 'deploy', '--version=prod']

如果你能帮助我,我将不胜感激。

谢谢

这是因为在您的 app.yaml 文件中,您没有提供 service 标签。如果未提供服务标签,该服务将部署为 default 服务。例如当您部署前端时,它会被部署为默认服务。然后你部署你的后端,它也被部署为默认服务覆盖现有的默认服务。反之亦然。

在前端的 app.yaml 中添加 service 标签:

service: frontend
runtime: nodejs10

您可以将后端保留为默认服务,即后端 app.yaml

中没有服务标签