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
中没有服务标签
我有一个 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
中没有服务标签