透過原始碼部署工作站集區

本頁面說明如何使用單一 gcloud CLI 指令 gcloud run worker-pools deploy 搭配 --source 旗標,直接從原始碼將新的 worker 集區或 worker 集區修訂版本部署至 Cloud Run。

在背景中,這項指令會使用 Google Cloud 的 Buildpack 和 Cloud Build,自動從原始碼建構容器映像檔,您不必在機器上安裝 Docker,也不必設定 Buildpack 或 Cloud Build。根據預設,Cloud Run 會使用 Cloud Build 提供的預設機器類型。執行 gcloud run worker-pools deploy 後,就不需要再執行 gcloud builds submit 指令。

請注意,來源部署作業會使用 Artifact Registry 儲存建構的容器。如果專案在部署區域中沒有名為 cloud-run-source-deploy 的 Artifact Registry 存放區,這項功能會自動建立名為 cloud-run-source-deploy 的 Artifact Registry 存放區。

如果原始碼目錄中有 Dockerfile,系統會使用該 Dockerfile 建構上傳的原始碼。如果原始碼目錄中沒有 Dockerfile,Google Cloud 的 Buildpacks 會自動偵測您使用的語言,並擷取程式碼的依附元件,使用 Google 代管的安全基礎映像檔,建立可用於正式環境的容器映像檔。

事前準備

  • 請務必按照設定頁面所述,為 Cloud Run 設定新專案。
  • 啟用 Cloud Run Admin API (如果尚未啟用)。

    啟用 API 所需的角色

    您必須具備 serviceusage.services.enable 權限,才能啟用 API。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「Service Usage 管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。

    啟用 API

    啟用 Cloud Run Admin API 後,系統會自動建立 Compute Engine 預設服務帳戶。

必要的角色

如要從來源部署,您或管理員必須將下列 IAM 角色授予部署者帳戶。

按一下即可查看部署者帳戶的必要角色

如要取得從來源建構及部署所需的權限,請要求管理員授予您下列 IAM 角色:

如要查看與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱「Cloud Run IAM 角色」和「Cloud Run IAM 權限」。如果 Cloud Run worker 集區與Google Cloud API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。如要進一步瞭解如何授予角色,請參閱部署權限和管理存取權。

支援的語言

除了含有 Dockerfile 的來源之外,從來源部署也支援使用 Google Cloud 的 buildpack 部署下列語言:

  • Go
  • Node.js
  • Python
  • Java
  • Kotlin
  • Groovy
  • Scala
  • .NET
  • 小茹
  • PHP

進一步瞭解支援的語言版本。

使用建構作業從來源部署

本節說明如何使用 Google Cloud 的 Buildpacks 和 Cloud Build,自動從原始碼建構容器映像檔,而不必在機器上安裝 Docker,或設定 Buildpacks 或 Cloud Build。

限制

  • 從來源部署功能會使用 Artifact Registry 和 Cloud Build,因此僅適用於 Artifact Registry 和 Cloud Build 支援的區域。
  • 從來源部署是一項便利功能,但無法完整自訂建構作業。如要進一步控管,請使用 Cloud Build 建構容器映像檔 (例如使用 gcloud builds submit),然後使用 gcloud run worker-pools deploy --image 等工具部署容器映像檔。
  • 使用 Google Cloud 的 buildpack 從來源部署時,會將來源檔案的上次修改日期設為 1980 年 1 月 1 日。這是 buildpack 的預設行為,旨在支援可重現的建構作業。視語言架構而定,這可能會影響靜態檔案的瀏覽器端快取。如果您的應用程式受到影響,Google 建議您在應用程式中停用 etag 和 Last-Modified HTTP 標頭。
  • 使用 Google Cloud 的 Buildpack 從來源部署時,一律會使用 gcr.io/buildpacks/builder:latest。如果 latest 不支援您偏好的語言或 OS 設定,請使用特定建構工具,透過偏好的建構工具建立應用程式映像檔。
  • 您可以使用 Kotlin 和其他 JVM 語言 (例如 Java),從來源部署 worker 集區。您使用的語言必須符合下列規則:

    • 您可以使用 Maven 或 Gradle 建構應用程式。
    • 建構檔案包含產生類別所需的所有外掛程式。

使用建構作業部署前

使用建構作業從來源部署前,請先完成下列事項:

  • 按照「事前準備」中的步驟操作。

  • 啟用 Cloud Build API (如果尚未啟用)。

    啟用 API 所需的角色

    您必須具備 serviceusage.services.enable 權限,才能啟用 API。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「Service Usage 管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。

    啟用 API

必要的角色

如要透過建構作業從來源部署,您或管理員必須將下列 IAM 角色授予 Cloud Build 服務帳戶。

按一下即可查看 Cloud Build 服務帳戶的必要角色

Cloud Build 會自動使用 Compute Engine 預設服務帳戶做為預設 Cloud Build 服務帳戶,建構原始碼和 Cloud Run 資源,除非您覆寫這項行為。如要讓 Cloud Build 建構來源,請要求管理員將 Cloud Run 建構工具 (roles/run.builder) 授予專案的 Compute Engine 預設服務帳戶:

  gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --role=roles/run.builder
  

將 PROJECT_NUMBER 替換為 Google Cloud專案編號,並將 PROJECT_ID 替換為 Google Cloud專案 ID。如需尋找專案 ID 和專案編號的詳細操作說明,請參閱「建立及管理專案」。

將 Cloud Run 建構工具角色授予 Compute Engine 預設服務帳戶後,需要幾分鐘的時間才會生效。

如要查看與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱「Cloud Run IAM 角色」和「Cloud Run IAM 權限」。如果 Cloud Run worker 集區與Google Cloud API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。如要進一步瞭解如何授予角色,請參閱部署權限和管理存取權。

使用建構作業部署

如要從原始碼部署:

  1. 在 Google Cloud 控制台啟用 Cloud Shell。

    啟用 Cloud Shell

    Google Cloud 控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已設定適用於您目前專案的值。工作階段可能要幾秒鐘的時間才能初始化。

  2. 切換至來源目錄。來源目錄會使用 Dockerfile (如有),但這並非必要。

  3. 建構及部署 worker 集區:

    gcloud run worker-pools deploy WORKERPOOL --source .
    將 WORKERPOOL 替換為工作站集區的名稱。

  4. 如果系統提示您安裝必要 API,請回覆 y。每個專案只需執行一次這項操作。如果您尚未按照設定頁面所述設定預設值,請提供平台和區域,回應其他提示。

  5. 等候建構及部署作業完成。完成後,Cloud Run 會顯示成功訊息。

自動從原始碼建構

為避免本機來源中出現未建立版本的變更,Google 建議您在變更推送至 Git 存放區時自動部署。為簡化這項作業,您可以連結並設定 Cloud Run worker 集區的持續部署作業。將 GitHub 存放區連結至 Cloud Run 後,您就能設定建構作業及部署存放區,不必編寫 Dockerfile 或建構檔案。

後續步驟

部署 Cloud Run worker 集區後,您可以執行下列操作: