將 Cloud Deploy 與 CI 系統整合

本文件說明如何從持續整合 (CI) 系統叫用 Cloud Deploy 提交管道。

只要將呼叫新增至 Cloud Deploy gcloud CLI,即可輕鬆將 Cloud Deploy 與 CI 系統整合。這項呼叫會在 CI 管道中應用程式準備好部署時發生。

事前準備

本頁的操作說明假設您已符合下列條件:

透過 CI 管道呼叫 Cloud Deploy

下列指令會建立新的版本,進而叫用發布管道執行個體:

gcloud deploy releases create RELEASE_NAME \
  --delivery-pipeline=PIPELINE_NAME \
  --region=REGION \
  --annotations=[KEY=VALUE,...] \
  --images=[IMAGE_LIST]

其中...

  • RELEASE_NAME

    是您為此版本指定的名稱。必須提供這個值。

    您可以加入 '$DATE''$TIME',或同時加入這兩者,指定動態版本名稱。舉例來說,如果您在下午 3 點 7 分 (世界標準時間) 執行這項指令,'rel-$TIME' 會解析為 rel-1507'$DATE''$TIME' 必須以單引號括住。

  • PIPELINE_NAME

    是您註冊的提交管道名稱。必須提供這個值。

  • REGION

    是您要建立此版本的地區。這個區域不必與您最終部署應用程式的區域相同。

  • [KEY=VALUE,...]

    為選用的清單,內含一或多個要套用至版本的註解,格式為鍵/值組合。

    您可以使用註解追蹤發布來源,例如傳遞 commitId=0065ca0 這類註解。當您listget版本時,系統會傳回版本的所有註解,並在 Google Cloud 控制台中與版本一併顯示,方便您查看版本來源。

  • [IMAGE_LIST]

    是半形逗號分隔的圖片名稱至圖片路徑替換項目清單。例如 --images=image1=path/to/image1:v1@sha256:45db24,image2=path/to/image2:v1@sha256:55xy18

    如果您傳遞 --build-artifacts (用於識別 Skaffold 建構構件輸出檔案),則不需要這個值。

    當 Cloud Deploy 算繪資訊清單時,未算繪資訊清單中的圖片名稱會替換為已算繪資訊清單中的完整圖片參照。也就是說,這個範例中的 image1 位於未轉譯的資訊清單中,並在轉譯後的資訊清單中替換為 path/to/image1:v1@sha256:45db24

使用直接圖片參考資料的範例

以下指令會建立新版本,直接傳遞映像檔參照,而非建構構件檔案:

gcloud deploy releases create my-release \
  --delivery-pipeline=web-app \
  --region=us-central1 \
  --images=image1=path/to/image1:v1@sha256:45db24

在這個範例中,my-release 是版本名稱。如果您想根據日期或時間產生版本名稱,可以加入 '$DATE''TIME',也可以同時加入這兩者。時間是您叫用指令的電腦上的世界標準時間。'$DATE''$TIME' 必須以單引號括住。

範例如下:

gcloud deploy releases create rel-'$DATE'-'$TIME' \
  --delivery-pipeline=web-app \
  --region=us-central1 \
  --images=image1=path/to/image1:v1@sha256:45db24

在這個範例中,指令會產生含有前置字串 rel- 的版本名稱,並加上日期和時間,例如:rel-20220131-1507

在版本名稱中使用 Git SHA 也是常見的做法。請參閱本文中的Cloud Build 和 Docker 範例

建構作業構件與映像檔

gcloud deploy releases create 指令上,您可以傳遞一組圖片參照或建構構件檔案參照。

  • 使用 --images=[NAME=TAG,...] 參照一或多個個別容器圖片。

    這個值是個別圖片名稱與圖片完整路徑替換項目的集合參照。範例如下:

    gcloud deploy releases create my-release --images=image1=path/to/image1:v1@sha256:45db24

  • 使用 --build-artifacts= 指向 Skaffold 建構構件輸出檔案。

Cloud Build 範例:傳遞建構構件檔案

Docker 建構範例

以下 YAML 檔案示範 Cloud Build 用於Docker 建構映像檔推送,並最終建立 Cloud Deploy 版本。

這個範例會建構並將映像檔推送至構件存放區,並建構指令來建立版本,版本名稱則是根據 SHA 短版提交內容建立。這個範例必須用於 Cloud Build SCM 觸發事件,因為它會依賴 $COMMIT_SHA 變數。

本範例會將映像檔推送至與來源存放區的提交雜湊相同的 Docker 標記。接著,從發布指令引數參照相同的提交雜湊值,做為 Docker 標記。

steps:
# Build and tag using commit sha
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '.', '-t', 'REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}', '-f', 'Dockerfile']
# Push the container image
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}']
# Create release in Google Cloud Deploy
- name: gcr.io/google.com/cloudsdktool/cloud-sdk
  entrypoint: gcloud
  args:
    [
      "deploy", "releases", "create", "rel-${SHORT_SHA}",
      "--delivery-pipeline", "PIPELINE_NAME",
      "--region", "us-central1",
      "--annotations", "commitId=${REVISION_ID}",
      "--images", "IMAGE_NAME=REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}"
    ]

請注意,這個範例結尾的圖片名稱 "--images", "IMAGE_NAME= 會在轉譯後的資訊清單中替換為完整圖片參照。

使用 Skaffold 的 Cloud Build 設定範例

以下 YAML 檔案是 Cloud Build 建構設定的內容,其中包含對 Cloud Deploy 的呼叫,用於建立以日期為依據的發布子版本。這個範例也顯示了用於建構的 Skaffold。

steps:
- name: gcr.io/k8s-skaffold/skaffold
  args:
    - skaffold
    - build
    - '--interactive=false'
    - '--file-output=/workspace/artifacts.json'
- name: gcr.io/google.com/cloudsdktool/cloud-sdk
  entrypoint: gcloud
  args:
    [
      "deploy", "releases", "create", "rel-${SHORT_SHA}",
      "--delivery-pipeline", "PIPELINE_NAME",
      "--region", "us-central1",
      "--annotations", "commitId=${REVISION_ID}",
      "--build-artifacts", "/workspace/artifacts.json"
    ]

將 GitHub Actions 連結至 Cloud Deploy

如果您使用 GitHub Actions 進行持續整合或其他軟體提交相關活動,可以使用 create-cloud-deploy-release GitHub Action 連結至 Cloud Deploy,以便持續提交。

將 GitLab 連結至 Cloud Deploy

如果您使用 GitLab 進行持續整合,可以使用 GitLab Cloud Deploy 元件 create-cloud-deploy-release 建立 Cloud Deploy 版本。

您也可以試試端對端教學課程,瞭解如何搭配 Google Cloud使用 GitLab。

使用註解追蹤版本的來源

--annotations= 旗標可讓您將一或多個任意鍵/值組合套用至此指令建立的版本。您可以將此旗標新增至 gcloud deploy releases create 指令。

舉例來說,您可以使用下列鍵/值組合,追蹤要部署的圖片來源。

範例如下:

gcloud deploy releases create web-app-1029rel \
  --delivery-pipeline=web-app \
  --region=us-central1 \
  --annotations=commitId=0065ca0,author=user@company.com \
  --images=image1=path/to/image1:v1@sha256:45db24

您也可以建立註解,其值是指向拉取要求的網址。詳情請參閱「在 Cloud Deploy 中使用標籤和註解」一文。