使用 Cloud Deploy 将应用部署到 Cloud Run
本页介绍了如何使用 Cloud Deploy 将名为 hello
的示例应用映像交付给两个 Cloud Run 服务或两个 Cloud Run 作业的序列。
在本快速入门中,您将执行以下操作:
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, Cloud Run, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, Cloud Run, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- 确保默认 Compute Engine 服务账号具有足够的权限。
服务账号可能已经拥有必要的权限。针对默认服务账号停用自动角色授予的项目包含这些步骤。
- 添加
clouddeploy.jobRunner
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/clouddeploy.jobRunner"
- 向默认执行服务账号
actAs
授予将工作负载部署到 Cloud Run 的权限:gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/iam.serviceAccountUser" \ --project=PROJECT_ID
- 添加 Cloud Run 开发者权限:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/run.developer"
如果您在添加其中任一角色时遇到问题,请与您的项目管理员联系。
如果您已安装 CLI,请确保您运行的是最新版本:
gcloud components update
准备 Skaffold 配置
Cloud Deploy 使用 Skaffold 提供要部署的内容的详细信息,以及如何为您的单独目标正确部署这些内容。
在本快速入门中,您将创建一个 skaffold.yaml
文件,以标识要用于部署示例应用的 Cloud Run 服务或作业定义。
打开一个终端窗口。
创建名为
deploy-run-quickstart
的新目录并导航至该目录。mkdir deploy-run-quickstart cd deploy-run-quickstart
创建名为
skaffold.yaml
且包含以下内容的文件:服务
apiVersion: skaffold/v4beta7 kind: Config metadata: name: deploy-run-quickstart profiles: - name: dev manifests: rawYaml: - run-service-dev.yaml - name: prod manifests: rawYaml: - run-service-prod.yaml deploy: cloudrun: {}
作业
apiVersion: skaffold/v4beta7 kind: Config metadata: name: deploy-run-quickstart profiles: - name: dev manifests: rawYaml: - run-job-dev.yaml - name: prod manifests: rawYaml: - run-job-prod.yaml deploy: cloudrun: {}
此文件是一个最小 Skaffold 配置,用于标识您的 Cloud Run 服务或作业。如需详细了解此文件,请参阅
skaffold.yaml
参考文档。
准备 Cloud Run 服务或作业
在此快速入门中,您将在同一个项目中创建两个不同的 Cloud Run 服务或两个 Cloud Run 作业。Cloud Deploy 还支持跨多个项目部署。此外,我们使用 Skaffold 配置文件,以便在同一项目中拥有两个服务或作业。使用不同的项目时,您可能不需要使用 Skaffold 配置文件。
服务
创建名为
run-service-dev.yaml
且包含以下内容的文件:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: deploy-run-service-dev spec: template: spec: containers: - image: my-app-image
此文件用于定义 Cloud Run 服务。顾名思义,
deploy-run-service-dev
是您的dev
服务,对应于交付流水线进程中的第一个目标。创建名为
run-service-prod.yaml
且包含以下内容的文件:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: deploy-run-service-prod spec: template: spec: containers: - image: my-app-image
此文件定义了另一项 Cloud Run 服务,正如
deploy-run-service-prod
这个名称所暗示,这是您的prod
服务,对应于交付流水线进度中的第二个目标。
这些文件是简单的 Cloud Run 服务定义,用于部署应用。此处将要部署的容器映像设置为占位符 my-app-image
,在您创建版本时,系统会将其替换为特定映像。
作业
创建名为
run-job-dev.yaml
且包含以下内容的文件:apiVersion: run.googleapis.com/v1 kind: Job metadata: name: deploy-run-job-dev spec: template: spec: template: spec: containers: - image: my-app-image
此文件定义了 Cloud Run 作业。顾名思义,
deploy-run-job-dev
是您的dev
作业,对应于交付流水线进程中的第一个目标。创建名为
run-job-prod.yaml
且包含以下内容的文件:apiVersion: run.googleapis.com/v1 kind: Job metadata: name: deploy-run-job-prod spec: template: spec: template: spec: containers: - image: my-app-image
此文件定义了另一个 Cloud Run 作业。顾名思义,
deploy-run-job-prod
是您的prod
作业,对应于交付流水线进程中的第二个目标。
这些文件是简单的 Cloud Run 作业定义,用于部署应用。要部署的容器映像在此处设置为占位符 my-app-image
,在您创建版本时,系统会将其替换为特定映像。
创建交付流水线和目标
您可以在一个文件中或在单独的文件中定义流水线和目标。在本快速入门中,您将创建一个文件。
在
deploy-run-quickstart
目录中,创建包含以下内容的新文件clouddeploy.yaml
:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-run-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: run-qsdev profiles: [dev] - targetId: run-qsprod profiles: [prod] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: run-qsdev description: Cloud Run development service run: location: projects/PROJECT_ID/locations/us-central1 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: run-qsprod description: Cloud Run production service run: location: projects/PROJECT_ID/locations/us-central1
在 Cloud Deploy 服务中注册流水线和目标:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
现在,您已经有了包含目标的流水线,可以将应用部署到第一个目标了。
确认您的流水线和目标:
在 Google Cloud 控制台中,前往 Cloud Deploy 交付流水线页面,查看可用交付流水线的列表。
此时将显示您刚刚创建的交付流水线,并且目标列会列出了两个目标。
创建版本
版本是表示要部署的更改的中央 Cloud Deploy 资源。交付流水线定义该版本的生命周期。如需详细了解该生命周期,请参阅 Cloud Deploy 服务架构。
从 deploy-run-quickstart
目录运行以下命令,以创建表示要部署的容器映像的 release
资源:
服务
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-run-demo-app-1 \
--images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:4a856b6f1c3ce723a456ddc2adfbb794cbfba93f727e2d96fcf6540bd0d6fff4
作业
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-run-demo-app-1 \
--images=my-app-image=us-docker.pkg.dev/cloudrun/container/job@sha256:d7c33651fbad911a9a0a0c16f2f9b3a79f0b9e3e89afb205603af706067feac5
请注意 --images=
标志,您可以使用该标志将服务或作业定义中的占位符 (my-app-image
) 替换为经过 SHA 认证的特定映像。Google 建议您以这种方式将服务和作业定义设置为模板,并在创建版本时使用 SHA 限定的映像名称。
与所有版本(除非包含 --disable-initial-rollout
)一样,Cloud Deploy 还会自动创建发布资源。应用会自动部署到进展中的第一个目标。
提升版本
在交付流水线页面中,点击
my-run-demo-app-1
流水线。交付流水线详情页面显示交付流水线进展的图形表示。在本示例中,它显示版本已部署到
run-qsdev
目标。在交付流水线直观显示中的第一个目标上,点击提升。
此时将显示提升版本对话框。它会显示您要提升到的目标的详细信息。
点击提升。
该版本现已加入队列以部署到
run-qsprod
。部署完成后,交付流水线直观显示会将其显示为已部署:
在 Google Cloud 控制台中查看结果
在 Google Cloud 控制台中,前往 Cloud Deploy 交付流水线页面,以查看您的 my-run-demo-app-1 交付流水线。
点击交付流水线的名称“my-run-demo-app-1”。
流水线直观显示将显示应用在流水线中进展。
您的版本列在版本标签页中交付流水线详细信息下。
点击版本名称
test-release-001
。您的发布会显示在发布下。您可以点击发布以查看其详细信息,包括部署日志。
访问 Cloud Run 服务
默认情况下,您必须经过身份验证才能访问新创建的 Cloud Run 服务。请参阅 Cloud Run 身份验证概览,了解如何提供凭据,以及需要进行哪些 Identity and Access Management 配置才能在不进行身份验证的情况下访问服务。这不适用于 Cloud Run 作业。
清理
为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。
删除
deploy-qs-dev
Cloud Run 服务或作业:服务
gcloud run services delete deploy-run-service-dev --region=us-central1 --project=PROJECT_ID
作业
gcloud run jobs delete deploy-run-job-dev --region=us-central1 --project=PROJECT_ID
删除
deploy-qs-prod
服务:服务
gcloud run services delete deploy-run-service-prod --region=us-central1 --project=PROJECT_ID
作业
gcloud run jobs delete deploy-run-job-prod --region=us-central1 --project=PROJECT_ID
删除交付流水线、目标、版本和发布:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
删除 Cloud Deploy 创建的 Cloud Storage 存储分区。
一个以
_clouddeploy
结尾,另一个是[region].deploy-artifacts.[project].appspot.com
。
恭喜,您已经完成快速入门!