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

每當您變更原始碼時,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 控制台中開啟「觸發條件」頁面。

    開啟觸發條件頁面

  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 會使用建構設定檔中指定的區域執行建構作業。如果建構設定檔中指定了私人集區,這可以是私人集區的區域;如果未指定私人集區,則為全域預設集區。

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

    • 「Event」(事件):選取要叫用觸發條件的存放區事件。

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

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

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

    • 來源:選取「第 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 Repositories,且您將變更推送至新建立的分支版本,Cloud Build 會將存放區中的所有檔案視為變更過的檔案。
      • 如果您刪除分支版本,Cloud Build 不會啟動建構。
    • 設定:選取遠端存放區中的建構設定檔,或建立內嵌建構設定檔,以用於建構作業。

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

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

    • 使用私人集區:如果您選取「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 控制台中開啟「觸發條件」頁面。

    開啟觸發條件頁面

  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 記錄頁面

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

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

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

更新建構作業觸發條件

主控台

  1. 在 Google Cloud 控制台中開啟「觸發條件」頁面。

    開啟「建構觸發條件」頁面

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

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

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

  5. 選取 [編輯]

操作說明,瞭解如何更新建構觸發條件,以顯示或隱藏 GitHub 或 GitHub Enterprise 觸發條件的建構記錄。

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 控制台中開啟「觸發條件」頁面。

    開啟「建構觸發條件」頁面

  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 控制台中開啟「觸發條件」頁面。

    開啟「建構觸發條件」頁面

  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 服務帳戶」。

後續步驟