1. 總覽
在本實驗室中,您將使用 Cloud Deploy 將 .Net 應用程式部署至 Cloud Run。您將使用 Cloud Build 建構容器映像檔,而不使用 Dockerfile。您將使用 Cloud Deploy 設定管道,其中包含三個目標環境,並逐步將發布內容推送至各個環境。最後,您將核准發布版本,以便部署至正式環境。

什麼是 Cloud Build?
使用 Cloud Build,您可以迅速建構所有程式設計語言的軟體。
什麼是 Cloud Deploy?
Cloud Deploy 是全代管的持續推送軟體更新服務,您可以使用 Cloud Deploy 建立 GKE、Anthos 和 Cloud Run 的部署管道。
什麼是 Cloud Run?
透過 Cloud Run,您可以在全代管平台上,以任何語言 (包括 Go、Python、Java、Node.js、.NET 和 Ruby) 部署可擴充的容器化應用程式。
什麼是 Skaffold?
Skaffold 是一項指令列工具,可為 Kubernetes 原生應用程式提供持續開發功能。Cloud Deploy 會使用 Skaffold 執行算繪和部署作業。
學習目標
在本實驗室中,您將瞭解如何執行下列操作:
- 建立 Cloud Deploy 管道
- 使用 Cloud Build 為 .NET 應用程式建立容器映像檔,無須 Dockerfile
- 使用 Cloud Deploy 將應用程式部署至 Cloud Run
- 升級 Cloud Deploy 版本
必要條件
- 本實驗室假設您已熟悉 Cloud 控制台和殼層環境。
2. 設定和需求
設定 Cloud 專案
- 登入 Google Cloud 控制台,然後建立新專案或重複使用現有專案。如果沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶。



- 專案名稱是這個專案參與者的顯示名稱。這是 Google API 未使用的字元字串。你隨時可以更新該位置資訊。
- 專案 ID 在所有 Google Cloud 專案中都是不重複的,而且設定後即無法變更。Cloud 控制台會自動產生不重複的字串,通常您不需要在意這個字串。在大多數程式碼研究室中,您需要參照專案 ID (通常會標示為
PROJECT_ID)。如果您不喜歡產生的 ID,可以產生另一個隨機 ID。你也可以嘗試自訂名稱,看看是否可用。完成這個步驟後就無法變更,且專案期間都會維持這個設定。 - 請注意,部分 API 會使用第三個值,也就是「專案編號」。如要進一步瞭解這三種值,請參閱說明文件。
- 接著,您需要在 Cloud 控制台中啟用帳單,才能使用 Cloud 資源/API。完成本程式碼研究室的費用應該不高,甚至完全免費。如要關閉資源,避免產生本教學課程以外的費用,您可以刪除自己建立的資源,或刪除整個專案。Google Cloud 新使用者可參加價值$300 美元的免費試用計畫。
環境設定
按一下搜尋列右側的圖示,啟用 Cloud Shell。

在 Cloud Shell 中執行下列指令,設定專案環境變數:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
export REGION=us-central1
啟用 API:
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
clouddeploy.googleapis.com \
artifactregistry.googleapis.com
建立 Artifact Registry 存放區,用於儲存應用程式容器映像檔:
gcloud artifacts repositories create containers-repo \
--repository-format=docker \
--location=${REGION} \
--description="Containers repository"
3. 查看設定檔

複製應用程式原始碼:
git clone https://github.com/gitrey/deploy-cloudrun-app-with-clouddeploy.git
cd deploy-cloudrun-app-with-clouddeploy
查看 Cloud Deploy 管道設定:
clouddeploy.yaml
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: cloud-run-pipeline
description: application deployment pipeline
serialPipeline:
stages:
- targetId: dev-env
profiles: [dev]
- targetId: qa-env
profiles: [qa]
- targetId: prod-env
profiles: [prod]
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: dev-env
description: Cloud Run development service
run:
location: projects/_PROJECT_ID/locations/us-west1
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: qa-env
description: Cloud Run QA service
run:
location: projects/_PROJECT_ID/locations/us-central1
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: prod-env
description: Cloud Run PROD service
run:
location: projects/_PROJECT_ID/locations/us-south1
查看 skaffold.yaml 檔案,其中定義了三個環境,並使用 Cloud Run 做為目標服務。
skaffold.yaml
apiVersion: skaffold/v3alpha1
kind: Config
metadata:
name: cloud-run-app
profiles:
- name: dev
manifests:
rawYaml:
- deploy-dev.yaml
- name: qa
manifests:
rawYaml:
- deploy-qa.yaml
- name: prod
manifests:
rawYaml:
- deploy-prod.yaml
deploy:
cloudrun: {}
查看服務設定檔。
deploy-dev.yaml
kind: Service
metadata:
name: app-dev
spec:
template:
spec:
containers:
- image: app
resources:
limits:
cpu: 1000m
memory: 128Mi
deploy-qa.yaml
kind: Service
metadata:
name: app-dev
spec:
template:
spec:
containers:
- image: app
deploy-prod.yaml
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: app-prod
spec:
template:
spec:
containers:
- image: app
查看 cloudbuild.yaml 檔案,瞭解建構容器映像檔和建立 Cloud Deploy 版本的步驟:
cloudbuild.yaml
steps:
- name: 'gcr.io/k8s-skaffold/pack'
entrypoint: 'pack'
args: ['build',
'--builder=gcr.io/buildpacks/builder',
'--publish', '${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID']
id: Build and package .net app
- name: gcr.io/google.com/cloudsdktool/cloud-sdk:slim
args:
[
"deploy", "releases", "create", "release-$_RELEASE_TIMESTAMP",
"--delivery-pipeline", "cloud-run-pipeline",
"--region", "${_REGION}",
"--images", "app=${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID"
]
entrypoint: gcloud
4. 建立 Cloud Deploy 管道
在 clouddeploy.yaml 中替換 _PROJECT_ID 值:
sed -i "s/_PROJECT_ID/$PROJECT_ID/g" clouddeploy.yaml
建立 Cloud Deploy 管道:
gcloud deploy apply \
--file=clouddeploy.yaml \
--region=${REGION} \
--project=${PROJECT_ID}
在 Cloud Deploy 中查看建立的管道。
5. 建構容器映像檔並建立版本
將 Cloud Deploy 運算子權限新增至 Cloud Build 服務帳戶:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
--role=roles/clouddeploy.operator
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
--role=roles/iam.serviceAccountUser
建立容器映像檔和 Cloud Deploy 版本:
export RELEASE_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')
gcloud builds submit \
--config cloudbuild-plus.yaml \
--substitutions=_REGION=${REGION},_RELEASE_TIMESTAMP=${RELEASE_TIMESTAMP}
在 Cloud Deploy 中查看建立的版本。等待部署至開發環境的作業完成。
6. 將版本推送至品質確保和實際工作環境
使用 Cloud Console 或 Cloud Shell,將版本推送至下一個目標(qa-env)。
使用 Cloud Shell 升級版本,執行 gcloud 指令來升級版本。
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
等待部署至 QA 環境完成。將版本推送至下一個目標(prod-env)。
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
在 Cloud Console 中開啟 Cloud Deploy,然後核准正式版部署作業。

查看 Cloud Deploy 管道狀態和可用的 DORA 指標 (「部署次數」、「部署頻率」、「部署失敗率」)。
指標 | 說明 |
部署次數 | 部署至推送管道中最終目標的成功與失敗作業總數。 |
部署頻率 | 推送管道部署至您推送管道中最終目標的頻率。DevOps Research and Assessment (DORA) 計畫所定義的四大關鍵指標之一。 |
部署失敗率 | 將內容發布至推送管道中最終目標的失敗百分比。 |
在 Cloud Run 中查看已部署的應用程式:

7. 恭喜!
恭喜,您已完成本程式碼研究室!
涵蓋內容:
- 如何建立 Cloud Deploy 管道
- 如何使用 Cloud Build 為 .NET 應用程式建立容器映像檔
- 如何使用 Cloud Deploy 將應用程式部署至 Cloud Run
- 如何升級 Cloud Deploy 發布版本
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程所用資源的費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。
刪除專案
如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的專案。