將 Cloud Deploy 與 CI 系統整合

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

將 Cloud Deploy 與 CI 系統整合,就像是呼叫 Cloud Deploy gcloud CLI 一樣簡單。當應用程式準備好部署時,就會在 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 使用標籤和註解」。