从云构建将 django 部署到 GAE 标准
Deploy django to GAE standard from cloud build
我 运行 按照 bash 来自本地计算机的命令将 django 项目部署到 App 引擎。
python manage.py migrate
python manage.py collectstatic --noinput
gsutil rsync -R static/ gs://xyz4/static
gcloud config set project project_name_1
gcloud app deploy --quiet
我想在云构建上进行设置。我在云构建上启用了 PUSH 触发器。在创建 cloudbuild.yaml
文件
方面需要帮助
CloudBuild 不支持 VPC,因此不能用于迁移到私有云 sql -
以下是我将代码从 Github 存储库部署到 App Engine 标准时使用的步骤。每一步都依赖于上一步运行成功。
- 创建 python venv 并安装所有依赖项
- 安装 gcloud 代理并使其可执行
- 开启代理,激活venv,运行测试,如果测试通过则进行迁移,收集静态文件
- 将静态文件上传到 public 存储桶
- 将代码部署到 GAE 标准
cloudbuild.yaml:
- id: setup-venv
name: python:3.8-slim
timeout: 100s
entrypoint: sh
args:
- -c
- '(python -m venv my_venv && . my_venv/bin/activate && pip install -r requirements.txt && ls)'
waitFor: [ '-' ]
- id: proxy-install
name: 'alpine:3.10'
entrypoint: sh
args:
- -c
- 'wget -O /workspace/cloud_sql_proxy https://storage.googleapis.com/cloudsql-proxy/v1.21.0/cloud_sql_proxy.linux.amd64 && chmod +x /workspace/cloud_sql_proxy'
waitFor: [ 'setup-venv' ]
- id: run-tests-with-proxy
name: python:3.8-slim
entrypoint: sh
args:
- -c
- '(/workspace/cloud_sql_proxy -dir=/workspace -instances="<instance_name>=tcp:3306" & sleep 2) && (. my_venv/bin/activate && python manage.py test --noinput && python manage.py migrate && python manage.py collectstatic --noinput )'
waitFor: [ 'proxy-install' ]
env:
- 'CLOUD_BUILD=1'
- 'PYTHONPATH=/workspace'
# if tests fail, these sections wont execute coz they waitFor tests section
- id: upload-static-to-bucket
name: 'gcr.io/cloud-builders/gsutil'
entrypoint: 'bash'
args: [ '-c', 'gsutil rsync -R ./static/ gs://<bucket_name>/static' ]
waitFor: [ 'run-tests-with-proxy' ]
- id: deploy
name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'bash'
args: [ '-c', 'gcloud app deploy --quiet' ]
waitFor: [ 'upload-static-to-bucket' ]
改进空间:
- 如何将 args 分成多行而不是所有内容都在一行中
- 如果在 cloudbuild 上的本地 postgres 实例而不是生产云 sql 实例上测试 运行,那就太好了。我能够创建一个 postgres 实例,但它没有在后台 运行,因此当 运行ning 测试时我的代码无法连接到这个本地实例
postgres 在 cloudbuild.yaml:
- id: setup-postgres
name: postgres
timeout: 500s
waitFor: [ '-' ]
env:
- 'POSTGRES_PASSWORD=password123'
- 'POSTGRES_DB=aseem'
- 'POSTGRES_USER=aseem'
- 'PGPORT=5432'
- 'PGHOST=127:0:0:1'
使用 worker pools 在自定义 VPC 上对 运行 的 Cloud Build 支持。
您可以创建工作池来访问 VPC 中的资源。如果您将在构建时访问,您必须在您的工作池设置中单击“分配外部 IP”,并且您必须在您的 cloudbuild yaml 中使用以下代码:
options:
pool:
name: "projects/${PROJECT_ID}/locations/${_REGION}/workerPools/${_WORKER_POOL}"
substitutions:
_REGION: 'your_region'
_WORKER_POOL: 'your_pool_name'
如果您需要知道您的出站 IP,您可以从 Cloud Nat 访问它,如果您有出站防火墙规则,您必须分配一个专用 IP。
我 运行 按照 bash 来自本地计算机的命令将 django 项目部署到 App 引擎。
python manage.py migrate
python manage.py collectstatic --noinput
gsutil rsync -R static/ gs://xyz4/static
gcloud config set project project_name_1
gcloud app deploy --quiet
我想在云构建上进行设置。我在云构建上启用了 PUSH 触发器。在创建 cloudbuild.yaml
文件
CloudBuild 不支持 VPC,因此不能用于迁移到私有云 sql -
以下是我将代码从 Github 存储库部署到 App Engine 标准时使用的步骤。每一步都依赖于上一步运行成功。
- 创建 python venv 并安装所有依赖项
- 安装 gcloud 代理并使其可执行
- 开启代理,激活venv,运行测试,如果测试通过则进行迁移,收集静态文件
- 将静态文件上传到 public 存储桶
- 将代码部署到 GAE 标准
cloudbuild.yaml:
- id: setup-venv
name: python:3.8-slim
timeout: 100s
entrypoint: sh
args:
- -c
- '(python -m venv my_venv && . my_venv/bin/activate && pip install -r requirements.txt && ls)'
waitFor: [ '-' ]
- id: proxy-install
name: 'alpine:3.10'
entrypoint: sh
args:
- -c
- 'wget -O /workspace/cloud_sql_proxy https://storage.googleapis.com/cloudsql-proxy/v1.21.0/cloud_sql_proxy.linux.amd64 && chmod +x /workspace/cloud_sql_proxy'
waitFor: [ 'setup-venv' ]
- id: run-tests-with-proxy
name: python:3.8-slim
entrypoint: sh
args:
- -c
- '(/workspace/cloud_sql_proxy -dir=/workspace -instances="<instance_name>=tcp:3306" & sleep 2) && (. my_venv/bin/activate && python manage.py test --noinput && python manage.py migrate && python manage.py collectstatic --noinput )'
waitFor: [ 'proxy-install' ]
env:
- 'CLOUD_BUILD=1'
- 'PYTHONPATH=/workspace'
# if tests fail, these sections wont execute coz they waitFor tests section
- id: upload-static-to-bucket
name: 'gcr.io/cloud-builders/gsutil'
entrypoint: 'bash'
args: [ '-c', 'gsutil rsync -R ./static/ gs://<bucket_name>/static' ]
waitFor: [ 'run-tests-with-proxy' ]
- id: deploy
name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'bash'
args: [ '-c', 'gcloud app deploy --quiet' ]
waitFor: [ 'upload-static-to-bucket' ]
改进空间:
- 如何将 args 分成多行而不是所有内容都在一行中
- 如果在 cloudbuild 上的本地 postgres 实例而不是生产云 sql 实例上测试 运行,那就太好了。我能够创建一个 postgres 实例,但它没有在后台 运行,因此当 运行ning 测试时我的代码无法连接到这个本地实例
postgres 在 cloudbuild.yaml:
- id: setup-postgres
name: postgres
timeout: 500s
waitFor: [ '-' ]
env:
- 'POSTGRES_PASSWORD=password123'
- 'POSTGRES_DB=aseem'
- 'POSTGRES_USER=aseem'
- 'PGPORT=5432'
- 'PGHOST=127:0:0:1'
使用 worker pools 在自定义 VPC 上对 运行 的 Cloud Build 支持。
您可以创建工作池来访问 VPC 中的资源。如果您将在构建时访问,您必须在您的工作池设置中单击“分配外部 IP”,并且您必须在您的 cloudbuild yaml 中使用以下代码:
options:
pool:
name: "projects/${PROJECT_ID}/locations/${_REGION}/workerPools/${_WORKER_POOL}"
substitutions:
_REGION: 'your_region'
_WORKER_POOL: 'your_pool_name'
如果您需要知道您的出站 IP,您可以从 Cloud Nat 访问它,如果您有出站防火墙规则,您必须分配一个专用 IP。