測試及部署您的應用程式

瞭解如何在本機執行應用程式、進行部署,然後在 App Engine 上測試。

在本機執行

如要在部署前先測試應用程式的功能,請使用您常用的開發工具,在本機環境中執行應用程式。

舉例來說,如果您使用 Sinatra,可以使用下列指令以 Sinatra 的開發伺服器執行應用程式:

bundle exec ruby app.rb -p 8080

如果您使用 Rails,則可使用以下指令啟動應用程式:

rails server

部署應用程式

您可以使用 gcloud app deploy 指令,將應用程式部署至 App Engine。此指令會使用 Cloud Build 服務自動建立容器映像檔,然後將該映像檔部署至 App Engine 彈性環境。容器中會包含您對執行階段映像檔所進行的任何本機修訂。

如要透過程式來部署應用程式,請使用 Admin API

事前準備

部署應用程式之前:

確保成功部署

如果您啟用更新版健康狀態檢查,但是應用程式並未達到健康狀態良好狀態,則部署將會復原到未部署的狀態。

當您將第一個應用程式部署至彈性環境時,可能會因為系統設定虛擬機器 (VM) 和其他基礎架構而發生延遲。完成初始設定後,健康狀態檢查可確保執行個體的健康狀態良好,且已準備好可以接收流量。如果應用程式沒有在指定時間 (依 app.yaml 檔案之 liveness_check 區段的 initial_delay_sec 欄位指示) 內達到就緒狀態,部署作業將會失敗並復原到未部署的狀態。

您的應用程式可能需要更多時間才能準備就緒。例如,您可能是透過下載大型檔案或預先載入快取內容來初始化應用程式。如果您使用的是新版健康狀態檢查,則可修改 app.yaml 檔案 readiness_check 段落中的 app_start_timeout_sec 配置設定來延長時間。

部署服務

您可以透過部署應用程式各項服務的版本及設定檔,將應用程式部署至 App Engine。

如要部署應用程式服務的某個版本,請從服務的 app.yaml 檔案所在的目錄執行下列指令:

gcloud app deploy

使用該指令時如未指定任何檔案,僅會部署目前目錄中的 app.yaml 檔案。根據預設,deploy 指令會針對您部署的版本產生唯一識別碼、將該版本部署至您設定 gcloud 工具所使用的 GCP 專案,並且將所有流量轉送至新版本。

您可以藉由指定特定檔案的目標或是加入其他參數,來變更指令的預設行為:

  • 如要部署服務的其他設定檔,您必須個別指定及部署每個檔案。例如:

    gcloud app deploy cron.yaml
    gcloud app deploy dispatch.yaml
    gcloud app deploy index.yaml
    
  • 如要指定自訂版本 ID,請使用 --version 標記。

  • 如要避免系統將流量自動轉送到新版本,請使用 --no-promote 標記。

  • 如要部署到特定的 GCP 專案,請使用 --project 標記。

舉例來說,如果要將 app.yaml 定義的服務部署至特定的 GCP 專案,請為該服務指派自訂版本 ID,並避免將流量轉送至新版本:

gcloud app deploy --project PROJECT_ID --version VERSION_ID --no-promote

如要進一步瞭解這個指令,請參閱 gcloud app deploy 參考資料

部署多項服務

您可以使用相同的部署指令來部署或更新組成應用程式的多項服務。

如要部署多項服務,您必須個別部署每項服務的 app.yaml 檔案。例如:

gcloud app deploy service1/app.yaml
gcloud app deploy service2/app.yaml

您可以透過單一部署指令來指定多個檔案:

gcloud app deploy service1/app.yaml service2/app.yaml

部署多項服務的需求

  • 您必須先將應用程式的某個版本部署到 default 服務,才能建立及部署後續服務。

  • 您必須在每項服務相對應的 app.yaml 設定檔中指定服務 ID。如要指定服務 ID,請在每個設定檔中加入 service 元素定義。如果沒有在設定檔中加入這個元素定義,系統會依預設將版本部署到 default 服務。

略過檔案

如要禁止檔案和目錄在您部署服務時上傳至 GCP,您可以使用 .gcloudignore 檔案。如果您希望略過無須與部署項目一同上傳的建構作業成果和其他檔案,這個方法就非常實用。

如要進一步瞭解 .gcloudignore 檔案語法,請參閱 gcloud 參考資料

手動建構用於部署的容器

如果您想要在 Google Cloud Platform 的外部建構容器映像檔,必須先將映像檔上傳至容器映像檔的存放區,才能使用 gcloud app deploy 指令將映像檔部署至 App Engine。

舉例來說,如果您是在本機環境中使用 Docker 建立容器映像檔,可以將這些映像檔推送至 Google Container Registry,然後在指令的 --image-url 標記中指定映像檔網址:

gcloud app deploy --image-url gcr.io/YOUR_PROJECT_ID/YOUR_CONTAINER_IMAGE

使用自動化持續部署管道

您可以使用 Cloud Build 自動在持續部署管道中進行部署。詳情請參閱 Cloud Build 說明文件中的部署成果一節和使用建構觸發條件自動建構一文。

Ruby 專用的 Docker 基本映像檔

如果您想從頭建立 Ruby 自訂執行階段應用程式,請在 Dockerfile 中使用提供的基本映像檔:

執行階段 Docker 指令
Ruby FROM gcr.io/google-appengine/ruby

查看應用程式

您將應用程式部署至 App Engine 之後,即可執行下列指令來啟動瀏覽器,並在 http://YOUR_PROJECT_ID.appspot.com 查看應用程式:

gcloud app browse

在 App Engine 中進行測試

您可以先在 App Engine 上測試新版本,然後再設定該版本以接收流量。例如,您可採取下列做法來測試 default 服務的新版本:

  1. 部署新版本並加入 --no-promote 標記:

    gcloud app deploy --no-promote
  2. 前往下列網址存取新版本:

    http://VERSION_ID.default.YOUR_PROJECT_ID.appspot.com
    

    您現在可以在 App Engine 執行階段環境中測試新版本。您可以在 Google Cloud Platform 主控台的 Stackdriver 記錄檢視器中查看應用程式的記錄,藉此進行偵錯。詳情請參閱寫入應用程式記錄一文。

    系統仍會將傳送至 http://YOUR_PROJECT_ID.appspot.com 的要求轉送至您先前設為接收流量的版本。

  3. 如要將流量傳送至新版本,請使用 GCP 主控台來遷移流量:

    管理版本

    選取您剛剛部署的版本,然後按一下 [Migrate traffic] (遷移流量)

您只要將網址中的 default 替換成服務名稱,即可透過相同程序測試其他服務的新版本:

http://VERSION_ID.SERVICE_ID.YOUR_PROJECT_ID.appspot.com
如要進一步瞭解如何指定特定服務和版本,請參閱要求的轉送方式

疑難排解

部署應用程式時,您可能會看到以下這個常見的錯誤訊息:

PERMISSION_DENIED: Operation not allowed
The "appengine.applications.create" permission is required.
如果 GCP 專案中缺少必要的 App Engine 應用程式gcloud app deploy 指令嘗試執行 gcloud app create 指令時可能會失敗。只有具備「擁有者」角色的帳戶才擁有建立 App Engine 應用程式的必要權限。
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Ruby 適用的 App Engine 彈性環境文件