使用 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.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
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.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
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
服務,對應於發布管道進度中的第 1 個目標。建立名為
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 工作。顧名思義,這是
prod
工作,對應於發布管道進度中的第二個目標。deploy-run-job-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 的「Delivery pipelines」(推送管道) 頁面,查看可用的推送管道清單。
系統會顯示您剛建立的提交管道,並在「目標」欄中列出兩個目標。
建立版本
版本是代表待部署變更的集中式 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:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a
工作
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:8eb3f5e72586de6375abe95aa67511c57c61d35fb37d5670e4d68624a68ef916
請注意 --images=
旗標,您可以使用該旗標將服務或工作定義中的預留位置 (my-app-image
) 替換為特定的 SHA 合格映像檔。Google 建議您以這種方式建立服務和工作定義範本,並在建立版本時使用 SHA 合格映像檔名稱。
如同所有版本 (除非包含 --disable-initial-rollout
),Cloud Deploy 也會自動建立rollout 資源。應用程式會自動部署至程序中的第一個目標。
推送版本
在「Delivery pipelines」頁面中,按一下
my-run-demo-app-1
管道。「提交管道詳細資料」頁面會以圖表呈現提交管道的進度。在本例中,這表示版本已部署至
run-qsdev
目標。在發布管道圖表中的第一個目標上,按一下「提交」。
系統會顯示「宣傳版本」對話方塊。這個頁面會顯示您要宣傳的目標對象詳細資料。
點選「升級」。
該版本現在已排入佇列,等待部署至
run-qsprod
。部署完成後,發布管道圖表會顯示已部署:
在 Google Cloud 控制台中查看結果
在 Google Cloud 控制台中,前往 Cloud Deploy 的「Delivery pipelines」(推送管道) 頁面,查看「my-run-demo-app-1」推送管道。
按一下推送管道名稱「my-run-demo-app-1」。
管道圖表會顯示應用程式在管道中的進度。
你的版本會列在「發布管道詳細資料」下方的「版本」分頁中。
按一下版本名稱
test-release-001
。推出計畫會顯示在「推出計畫」下方。您可以按一下推行內容,查看詳細資料,包括部署記錄。
存取 Cloud Run 服務
根據預設,您必須完成驗證,才能存取新建立的 Cloud Run 服務。請參閱 Cloud Run 的驗證總覽,瞭解如何提供憑證,以及需要進行哪些身分和存取權管理設定,才能在未經過驗證的情況下存取服務。這項規定不適用於 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
。
大功告成,您已經完成本快速入門導覽課程!