Google App Engine未部署两项服务(似乎是相互替代的)

时间:2019-06-20 05:18:25

标签: google-app-engine google-cloud-platform google-cloud-build

我有一个 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']

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

谢谢

1 个答案:

答案 0 :(得分:1)

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

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

service: frontend
runtime: nodejs10

您可以将后端保留为默认服务,即后端的app.yaml中没有服务标签