建立及管理自動建構觸發條件

Cloud Build 觸發條件會在您變更原始碼時自動啟動建構作業。您可以設定讓觸發條件在原始碼存放區發生任何變更時,或只有在變更符合特定條件時建構程式碼。

本頁說明如何連線至 GitHub 和 Bitbucket 等來源存放區,並建立自動建構觸發條件來建構存放區中的程式碼。

事前準備

如要取得建立及管理建構觸發條件所需的權限,請要求管理員為您授予專案的 Cloud Build 編輯者 (roles/cloudbuild.builds.editor) 身分與存取權管理角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

您或許還可透過自訂角色或其他預先定義的角色取得必要權限。

此外,請執行下列操作:

  • Enable the Cloud Build API.

    Enable the API

  • 請確認 Cloud Source Repositories、GitHub 或 Bitbucket 中有原始碼。
  • 請確認您有 DockerfileCloud Build 設定檔

連結至來源存放區

您必須先將 Cloud Build 連結至原始存放區,才能在該存放區中建構程式碼。根據預設,Cloud Source Repositories 中的存放區會連結至 Cloud Build。您可以在 Cloud Source Repositories 中直接為存放區建立觸發事件,不必手動連線。

如果您要連結外部存放區 (例如託管於 GitHub 或 Bitbucket 的存放區),就必須具備存放區的管理員層級權限,才能將存放區初始連結至 Cloud Build。在已連結至 Cloud Build 的存放區中建立觸發條件時,不需要管理員權限。

如要連結至 GitHub 或 Bitbucket,請完成下列步驟:

  1. 在 Google Cloud 控制台中開啟「Triggers」頁面。

    開啟觸發條件頁面

  2. 在 Google Cloud 控制台的工具列中,選取 Google Cloud 專案。

  3. 按一下「Connect Repository」(連結存放區)

  4. 從「Region」下拉式選單中,選取要建立觸發事件的區域。

  5. 選取儲存原始碼的存放區。

    如果您選取 GitHub (鏡像)Bitbucket (鏡像) 做為原始碼存放區,Cloud Build 會在 Cloud Source Repositories 中鏡像您的存放區,並使用鏡像進行所有作業。

  6. 按一下「繼續」

  7. 使用使用者名稱和密碼驗證來源存放區。

  8. 從可用存放區清單中選取存放區,然後按一下「連線」

    對於 GitHub 和 Bitbucket 等外部存放區,您必須具備您正在使用的 Google Cloud 專案擁有者層級權限。

  9. 按一下「建立觸發條件」繼續建立建構觸發條件,以便自動建構存放區中的原始碼,或按一下「完成」

建立版本觸發條件

主控台

  1. 在 Google Cloud 控制台中開啟「Triggers」頁面。

    開啟「觸發條件」頁面

  2. 在 Google Cloud 控制台的工具列中,選取 Google Cloud 專案。

  3. 按一下「建立觸發條件」

  4. 輸入下列觸發條件設定:

    • 名稱:輸入觸發條件的名稱。

    • 區域:選取觸發事件的區域

      如果與觸發條件相關聯的建構設定檔指定了私人集區,則您為觸發條件選取的區域必須與私人集區的區域相符。

      如果您選取 global 做為地區,Cloud Build 會使用建構設定檔中指定的地區來執行建構作業。如果您在建構設定檔中指定私人集區,則此值可以是私人集區的區域;如果未指定私人集區,則此值可以是全球預設集區。

    • 說明 (選填):輸入觸發條件的說明。

    • 事件:選取要叫用觸發條件的存放區事件。

      • 推送至分支版本:設定觸發條件,在修訂特定分支版本時啟動建構。

      • 推送新代碼標記:設定觸發條件,在包含特定代碼標記的修訂時啟動建構。

      • 提取要求:設定觸發條件,在提取要求的修訂時啟動建構。

    • 來源:選取「1 代」或「2 代」做為來源。您只能在選取「第 2 代」做為來源時,連結 GitHub 和 GitHub Enterprise 的存放區。詳情請參閱「Cloud Build 存放區」。

      • 存放區:從可用存放區清單中選取存放區。如要連結新的存放區,請參閱「連結至來源存放區」。
      • 分支版本標記:指定要比對的分支版本或標記值的規則運算式。標記中不得使用正斜線 (/)。如要進一步瞭解可接受的規則運算式語法,請參閱 RE2 語法

        建構作業執行時,Cloud Build 會將存放區的內容複製到 /workspace,也就是 Cloud Build 的預設工作目錄。如要進一步瞭解工作目錄,請參閱建構設定總覽頁面

        如要只允許從特定來源建構,請針對允許的整合 (constraints/cloudbuild.allowedIntegrations) 設定機構政策,拒絕與觸發事件中定義的來源互動。機構政策會覆寫觸發條件,因此不會執行建構作業。如需更多資訊,請參閱「根據機構政策封鎖專案」。

    • 包含的檔案 (選用):如果變更影響了至少一個以上的這些檔案,就會觸發建構作業。您可以使用glob 字串透過萬用字元指定多個檔案。可以使用的萬用字元包括 Go Match**替用字元支援的字元。

    • 忽略的檔案 (選用):只會影響受忽略檔案的變更不會觸發建構作業。您可以使用含有萬用字元的 glob 字串來指定多個檔案。可以使用的萬用字元包括 Go Match**替用字元支援的字元。

      如果您在「包含的檔案」和「忽略的檔案」中都指定了同一個檔案,該檔案發生變更時將不會觸發建構。假設您在「忽略的檔案」中指定 **/README.md,以便忽略任何目錄中的 README.md,並在「包含的檔案」中指定 src/*,當 src/ 資料夾中的任何檔案發生變更時觸發建構。現在如果您對 src/README.md 進行變更,Cloud Build 將不會啟動建構作業。每次您將變更推送至原始碼時,Cloud Build 都會在您變更的檔案中尋找包含及忽略的檔案,藉以確認是否應叫用建構:

      • 如果您將變更推送至現有分支版本的存放區,Cloud Build 會在您剛剛推送的修訂版本與之前將分支版本指向的修訂版本之間尋找變更過的檔案。
      • 如果您的存放區是 Cloud Source Repository,且您將變更推送至新建立的分支版本,Cloud Build 會將存放區中的所有檔案視為變更過的檔案。
      • 如果您刪除分支版本,Cloud Build 不會啟動建構作業。
    • 設定:選取位於遠端存放區的建構設定檔,或建立內嵌建構設定檔,以便用於建構。

      • 類型:選取要用於建構作業的設定類型。
        • Cloud Build 設定檔 (yaml 或 json):使用建構設定檔來設定。
        • Dockerfile:使用 Dockerfile 進行設定。
        • Buildpacks:使用Buildpacks 進行設定。
      • Location:指定設定檔的位置。

        • 存放區:如果設定檔位於遠端存放區,請提供建構設定檔Dockerfile 目錄或 buildpacks 目錄的位置。如果建構設定類型是 Dockerfile 或建構包,您需要為產生的映像檔提供名稱,並視需要為建構作業設定逾時時間。提供 Dockerfile 或 Buildpack 映像檔名稱之後,您會看見建構作業將執行的 docker buildpack 指令預覽。
        • Buildpack 環境變數 (選用):如果您選取 buildpacks 做為設定類型,請按一下「Add pack environment variable」,指定 Buildpack 環境變數和值。如要進一步瞭解 Buildpack 環境變數,請參閱「環境變數」。
        • 內嵌:如果您選取「Cloud Build 設定檔 (yaml 或 json)」做為設定選項,則可內嵌指定建構設定檔。按一下「Open Editor」,即可使用 YAML 或 JSON 語法在Google Cloud 主控台中編寫建構設定檔。按一下「完成」即可儲存建構設定。

    • 使用私人集區:如果您選取「Dockerfile」做為「設定」選項,系統就會顯示這個欄位。如果您要在私人集區中執行建構作業,請選取這個核取方塊。

    • 私人集區:如果您選取「使用私人集區」,請指定 projects/WORKERPOOL_PROJECT_ID/locations/REGION/workerPools/WORKERPOOL_ID 表單的私人集區資源名稱。

    • 替代變數 (選用):如果您選取 Cloud Build 設定檔做為建構設定檔選項,可以選擇使用這個欄位定義觸發事件專屬的替代變數。舉例來說,假設您要建立多個觸發條件,每個觸發條件都會將應用程式部署至特定環境。您可以指定應用程式在建構設定檔中部署至某個環境,然後使用這個欄位定義替代變數,指定這個觸發事件應部署至哪個環境。如要瞭解如何在建構設定檔中指定替換值,請參閱「替換變數值」。

    • 核准 (選用):勾選這個方塊,要求在建構作業執行前取得核准。

    • 服務帳戶:選取叫用觸發條件時要使用的服務帳戶。只有在觸發條件中指定的服務帳戶,才會用於由觸發條件執行的建構作業。如果您在建構設定中指定服務帳戶,系統在使用觸發條件時,就會忽略該服務帳戶。

  5. 按一下「建立」即可儲存自動建構觸發條件。

gcloud

如要建立觸發條件 (如果原始碼位於 Cloud Source Repositories 中)

    gcloud builds triggers create cloud-source-repositories \
    --repo=REPO_NAME \
    --branch-pattern=BRANCH_PATTERN \ # or --tag-pattern=TAG_PATTERN
    --build-config=BUILD_CONFIG_FILE \
    --service-account=SERVICE_ACCOUNT \
    --require-approval

其中:

  • REPO_NAME 是存放區的名稱。
  • BRANCH_PATTERN 是存放區中用於叫用建構作業的分支名稱。
  • TAG_PATTERN 是存放區中用於叫用建構作業的標記名稱。
  • BUILD_CONFIG_FILE 是建構設定檔的路徑。
  • SERVICE_ACCOUNT 是用於觸發和建構作業的服務帳戶。
  • 選用步驟:如要將觸發條件設為需要核准,請設定 --require-approval 標記。

如需完整的標記清單,請參閱 gcloud 參考資料,瞭解如何為 Cloud Source Repositories 建立觸發事件

如果原始碼位於 GitHub 中,如何建立觸發條件

    gcloud builds triggers create github \
    --name=TRIGGER_NAME \
    --region=REGION \
    --repo-name=REPO_NAME \
    --repo-owner=REPO_OWNER \
    --branch-pattern=BRANCH_PATTERN \ # or --tag-pattern=TAG_PATTERN
    --build-config=BUILD_CONFIG_FILE \
    --service-account=SERVICE_ACCOUNT \
    --require-approval
    --include-logs-with-status

其中:

  • REGION 是觸發條件的區域
  • REPO_NAME 是存放區的名稱。
  • REPO_OWNER 是存放區擁有者的使用者名稱。
  • BRANCH_PATTERN 是存放區中用於叫用建構作業的分支名稱。
  • TAG_PATTERN 是存放區中用於叫用建構作業的標記名稱。
  • BUILD_CONFIG_FILE 是建構設定檔的路徑。
  • SERVICE_ACCOUNT 是用於觸發和建構作業的服務帳戶。
  • 選用:--require-approval 是用於設定觸發條件,要求核准的標記。
  • 選用:--include-logs-with-status 是您可以指定的標記,用於顯示存放區的建構記錄。此標記支援 GitHubGitHub Enterprise 存放區的建構作業。

如需旗標的完整清單,請參閱 gcloud 參考資料,瞭解如何為 GitHub 建立觸發事件

執行 gcloud 指令後,您可以使用 Cloud Source Repositories 或 GitHub 建立觸發條件,並看到類似下方的輸出內容:

  NAME         CREATE_TIME                STATUS
  trigger-001  2019-10-30T20:45:03+00:00

測試建構觸發條件

如要手動測試建構觸發條件,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中開啟「Triggers」頁面。

    開啟觸發條件頁面

  2. 在 Google Cloud 控制台的工具列中,選取 Google Cloud 專案。

  3. 在清單中找出觸發條件,然後按一下「執行」

略過建構觸發條件

在某些情況下,您可能會想要變更原始碼,但不想叫用建構。例如,當您更新說明文件或設定檔時,可能並不想叫用建構作業。

在此類情境下,可以在修訂訊息中加入 [skip ci][ci skip],這樣就不會叫用建構。

如果您想要稍後在該修訂版本上執行建構,請使用「觸發條件」頁面中的「執行」按鈕。

在建構作業中納入存放區記錄

為了在 Git 存放區建構原始碼,Cloud Build 會執行存放區的淺複製。這表示只會在要建構的工作區中查看啟動建構的單次修訂版本。Cloud Build 不會查看其他任何分支版本或歷史記錄。這麼做的目的是為了提高效率,讓建構無須只是為了建構單次修訂版本,就花時間等待擷取完整存放區與歷史記錄。

如果您要在建構中包含更多存放區歷史記錄,請在您的建構設定檔中加入建構步驟以「取消淺複製」。例如:

steps:
- name: gcr.io/cloud-builders/git
  args: ['fetch', '--unshallow']
...

如要進一步瞭解 git fetch,請參閱 git 參考資料。如需編寫版本設定檔的操作說明,請參閱「建構設定總覽」。

重新提交版本以供核准

如果建構項目遭到拒絕,您可以按照以下步驟在 Google Cloud 控制台重新提交建構項目以供核准:

  1. 在 Google Cloud 控制台中開啟「Cloud Build History」(Cloud Build 記錄) 頁面。

    開啟 Cloud Build 的「History」(記錄) 頁面

  2. 按一下要重新提交審查的建構項目 ID。

  3. 按一下頁面頂端的「Rebuild」,重新提交建構項目以供核准。

當有權限的使用者核准您的版本時,系統就會開始執行。如要進一步瞭解 Cloud Build 核准作業,請參閱「運用核准機制控管建構作業」。

更新建構觸發條件

主控台

  1. 在 Google Cloud 控制台中開啟「Triggers」頁面。

    開啟「Build 觸發條件」頁面

  2. 在 Google Cloud 控制台的工具列中,選取 Google Cloud 專案。

  3. 找出要更新的觸發事件所在的資料列。

  4. 按一下資料列最右側的選單 (垂直刪節號)。

  5. 選取 [編輯]

gcloud

如要更新觸發條件,請按照下列步驟操作:

  1. 匯出要更新的觸發條件:

     gcloud beta builds triggers export TRIGGER_NAME --destination=EXPORT_PATH
    

    其中:

    • TRIGGER_NAME 是觸發條件的名稱。
    • EXPORT_PATH 是您要匯出觸發事件的路徑。舉例來說,您可以將路徑指定為 examples/trigger.yaml。請注意,觸發事件的檔案名稱應使用 YAML 副檔名。
  2. 開啟含有匯出觸發事件的檔案。

    檔案會類似以下內容:

     createTime: '2022-05-26T21:56:11.830784153Z'
     filename: cloudbuild.yaml
     github:
       name: cloud-build-example
       owner: main
       push:
         branch: master
     id: 86201062-3b14-4b6a-a2fb-4ee924e8b1dd
     # remove field name and value to not show build logs
     includeBuildLogs: INCLUDE_BUILD_LOGS_WITH_STATUS
     name: trigger-001
    
  3. 手動編輯檔案以更新觸發條件。

    如要查看可新增或移除至觸發事件的欄位,請參閱觸發事件資源

  4. 儲存檔案。

  5. 匯入觸發條件:

     gcloud builds triggers import --source=IMPORT_PATH
    

    其中:

    • IMPORT_PATH 是您要匯入的觸發事件路徑。

建構觸發條件已更新。

停用建構作業觸發條件

主控台

  1. 在 Google Cloud 控制台中開啟「Triggers」頁面。

    開啟「Build 觸發條件」頁面

  2. 在 Google Cloud 控制台的工具列中,選取 Google Cloud 專案。

  3. 找出要停用的觸發條件所在的資料列。

  4. 按一下資料列最右側的選單 (垂直刪節號)。

  5. 選取 [Disable] (停用)

gcloud

如要停用觸發條件,請按照下列步驟操作:

  1. 匯出要停用的觸發條件:

     gcloud beta builds triggers export TRIGGER_NAME --destination=EXPORT_PATH
    

    其中:

    • TRIGGER_NAME 是觸發條件的名稱。
    • EXPORT_PATH 是您要匯出觸發事件的路徑。舉例來說,您可以將路徑指定為 examples/trigger.yaml。請注意,觸發事件的檔案名稱應使用 YAML 副檔名。
  2. 開啟含有匯出觸發事件的檔案。

    檔案會類似以下內容:

     createTime: '2020-02-21T20:02:50.215599013Z'
     description: Push to any branch
     filename: cloudbuild.yaml
     github:
       name: example-repo-name
       owner: example-owner
       push:
         branch: .*
     id: example-id
     name: Push-to-any-branch
     tags:
     - github-default-push-trigger
    
  3. 在檔案結尾新增 disabled 欄位,並將值設為 True

     disabled: True
    
  4. 儲存檔案。

  5. 匯入觸發條件:

     gcloud builds triggers import --source=IMPORT_PATH
    

    其中:

    • IMPORT_PATH 是您要匯入的觸發條件路徑。

您的建構觸發條件現已停用。

停用觸發條件不會刪除觸發條件。如要刪除觸發條件,請參閱刪除版本觸發條件。只要將狀態變更為「已啟用」,即可重新啟用觸發條件。

刪除建構作業觸發條件

主控台

  1. 在 Google Cloud 控制台中開啟「Triggers」頁面。

    開啟「Build 觸發條件」頁面

  2. 在 Google Cloud 控制台的工具列中,選取 Google Cloud 專案。

  3. 找出要刪除的觸發條件所在的資料列。

  4. 按一下資料列最右側的選單 (垂直刪節號)。

  5. 選取 [刪除]

gcloud

如要刪除觸發條件,請執行下列指令:

  gcloud builds triggers delete TRIGGER_NAME

其中:

  • TRIGGER_NAME 是觸發條件的名稱。

如需旗標的完整清單,請參閱 gcloud 參考資料,瞭解如何刪除觸發條件

自動建構觸發條件對安全性的影響

為建構觸發事件設定的服務帳戶,可為使用觸發事件叫用建構作業的使用者提供提升的建構時間權限。這項規定適用於 Cloud Build 預設服務帳戶和使用者指定的服務帳戶。使用建構觸發事件時,請注意下列安全性影響:

  • 如果使用者沒有 Cloud 專案存取權,但有與專案中建構觸發事件相關聯的存放區的寫入權限,則該使用者將具備變更建構中程式碼的權限。
  • 如果您使用 GitHub 提取要求觸發條件,凡是有權讀取這個存放區的使用者,都能提交提取要求,並有可能藉此執行建構作業,部署透過提取要求提出的程式碼變更。如要瞭解如何停用 GitHub 提取要求觸發條件的這項行為,請參閱「建立 GitHub 觸發條件」。

建議您建立服務帳戶時,只為觸發條件建立必要的角色。詳情請參閱「設定使用者指定服務帳戶」。如要進一步瞭解預設 Cloud Build 服務帳戶及其相關權限,請參閱「Cloud Build 服務帳戶」。

後續步驟