繁体   English   中英

谷歌云构建、云运行、云 SQL Prisma 迁移

[英]Google Cloud Build, Cloud Run, Cloud SQL Prisma Migration

我正在尝试让 Google Cloud Build 管道与 Node.js 应用程序一起运行,该应用程序使用 Google Cloud Build、Cloud SQL (PostgreSQL) 和 Prisma 作为 ORM。 当单击现有应用程序的 Cloud Run UI 视图上的“ Setup Continuous Integration ”按钮时,我已经开始使用 GCP Cloud Build 提供的默认yaml 缺少的部分是 Cloud SQL 实例的 prisma 迁移。

steps:
  - name: gcr.io/cloud-builders/docker
    args:
      - build
      - '--no-cache'
      - '-t'
      - '$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
      - .
      - '-f'
      - api/Dockerfile
    id: Build
  - name: gcr.io/cloud-builders/docker
    args:
      - push
      - '$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
    id: Push
  - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:slim'
    args:
      - run
      - services
      - update
      - $_SERVICE_NAME
      - '--platform=managed'
      - '--image=$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
      - >-
        --labels=managed-by=gcp-cloud-build-deploy-cloud-run,commit-sha=$COMMIT_SHA,gcb-build-id=$BUILD_ID,gcb-trigger-id=$_TRIGGER_ID,$_LABELS
      - '--region=$_DEPLOY_REGION'
      - '--quiet'
    id: Deploy
    entrypoint: gcloud
images:
  - '$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
options:
  substitutionOption: ALLOW_LOOSE
tags:
  - gcp-cloud-build-deploy-cloud-run
  - gcp-cloud-build-deploy-cloud-run-managed
  - api

我使用以下 Cloud Build yaml 解决了这个问题。 这是托管在我的git存储库中,因此可以跟踪任何代码更改。 我选择Repository作为源,并在我的存储库中添加了cloudbuild.yaml文件的位置,而不是 Google Cloud Build 触发器中的inline选项。 只要从以前的 API 版本到新版本没有任何重大更改,此解决方案就应该有效(如果您在新应用程序代码拥有所有流量之前,这将在短时间内无效,例如,重命名旧应用程序代码所依赖的数据库中的字段)。 解决这个问题的方法是不要进行重大更改,并在删除旧列之前将数据从旧列迁移到新列。 另一种选择是安排数据库维护的停机时间。

请记住,当数据库迁移运行时存在竞争条件,但以前版本的代码在切换前仍在接受流量,使用该应用程序的人可能会收到 500 错误。

这是带有 Prisma 迁移步骤的更新后的cloudbuild.yaml (注意:这也为数据库使用了 Google Cloud Secret Manager):

steps:
  - name: 'node:$_NODE_VERSION'
    entrypoint: 'yarn'
    id: yarn-install
    args: ['install']
    waitFor: ["-"]

  - id: migrate
    name: gcr.io/cloud-builders/yarn
    env:
      - NODE_ENV=$_NODE_ENV
    entrypoint: sh
    args:
      - "-c"
      - |
        wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
        chmod +x cloud_sql_proxy
        ./cloud_sql_proxy -instances=$$_DB_HOST=tcp:$$_DB_PORT & sleep 3
        export DATABASE_URL=postgresql://$$_DB_USER:$$_DB_PASS@localhost/$$_DB_NAME?schema=public
        yarn workspace api run migrate
    secretEnv: ['_DB_USER', '_DB_PASS',  '_DB_HOST', '_DB_NAME', '_DB_PORT']
    timeout: "1200s"
    waitFor: ["yarn-install"]

  - name: gcr.io/cloud-builders/docker
    args:
      - build
      - '--no-cache'
      - '-t'
      - '$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
      - .
      - '-f'
      - api/Dockerfile
    id: Build
  - name: gcr.io/cloud-builders/docker
    args:
      - push
      - '$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
    id: Push
  - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:slim'
    args:
      - run
      - services
      - update
      - $_SERVICE_NAME
      - '--platform=managed'
      - '--image=$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
      - >-
        --labels=managed-by=gcp-cloud-build-deploy-cloud-run,commit-sha=$COMMIT_SHA,gcb-build-id=$BUILD_ID,gcb-trigger-id=$_TRIGGER_ID,$_LABELS
      - '--region=$_DEPLOY_REGION'
      - '--quiet'
    id: Deploy
    entrypoint: gcloud
images:
  - '$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
options:
  substitutionOption: ALLOW_LOOSE
availableSecrets:
  secretManager:
  - versionName: projects/$PROJECT_ID/secrets/DB_NAME/versions/latest
    env: '_DB_NAME'
  - versionName: projects/$PROJECT_ID/secrets/DB_PASS/versions/latest
    env: '_DB_PASS'
  - versionName: projects/$PROJECT_ID/secrets/DB_PORT/versions/latest
    env: '_DB_PORT'
  - versionName: projects/$PROJECT_ID/secrets/DB_USER/versions/latest
    env: '_DB_USER'
  - versionName: projects/$PROJECT_ID/secrets/DB_HOST/versions/latest
    env: '_DB_HOST'

tags:
  - gcp-cloud-build-deploy-cloud-run
  - gcp-cloud-build-deploy-cloud-run-managed
  - api

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM