本頁說明如何在 Secure Source Manager 中設定 Webhook。
Webhook 是由 Secure Source Manager 中的事件觸發的 HTTP 要求,並傳送至使用者指定的網址。
事前準備
必要的角色
如要取得建立 Webhook 所需的權限,請要求管理員授予您下列 IAM 角色:
- 使用機密查詢字串驗證 Webhook:
-
使用服務帳戶授權驗證 Webhook:
- 服務帳戶使用者 (
roles/iam.serviceAccountUser) 在 Secure Source Manager 存放區服務帳戶中 - Secure Source Manager 存放區服務帳戶的 SSM 服務代理程式 (
roles/iam.serviceAccountTokenCreator) - 目的地服務的 Cloud Run 叫用者 (
roles/run.invoker) (只有在目的地為 Cloud Run 時才需要)
- 服務帳戶使用者 (
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
如要瞭解如何授予 Secure Source Manager 角色,請參閱「使用 IAM 控管存取權」和「授予使用者執行個體存取權」。
設定 Webhook
控制台
- 在 Secure Source Manager 網頁介面中,前往要建立 Webhook 的存放區。
- 按一下「設定」。
- 按一下「Webhooks」,然後點選「Add webhook」。
在「Hook ID」(Webhook ID) 欄位中,輸入 Webhook 的 ID。
在「目標網址」欄位中,輸入 Webhook 網址。舉例來說,如要在 Jenkins 中觸發建構作業,可以設定 Webhook 觸發條件,然後在此輸入 Jenkins 觸發網址,即可在 Jenkins 中觸發建構作業。
在「觸發條件」部分,選取下列其中一個選項:
- 推送:在推送至存放區時觸發。
- 提取要求狀態已變更:在提取要求狀態變更時觸發。
使用私密查詢字串或服務帳戶驗證,設定 Webhook 驗證:
敏感查詢字串:
敏感查詢字串包含來自 Webhook 網址的
key和secret值,包括key=和secret=前置字元。如要設定私密查詢字串授權,請從 Webhook 網址移除這些值,然後新增至「私密查詢字串」欄位:- 從 Webhook 網址中刪除
?。 - 複製網址的其餘部分,從
key=開始。 - 將這部分貼入「敏感查詢字串」欄位。
- 從 Webhook 網址中刪除相同部分。
舉例來說,假設有以下網址:
https://cloudbuild.googleapis.com/v1/projects/my-project/triggers/test-trigger:webhook?key=eitIfKhYnv0LrkdsyHqIros8fbsheKRIslfsdngf&secret=My%20Secret%20您的機密查詢字串如下:
key=eitIfKhYnv0LrkdsyHqIros8fbsheKRIslfsdngf&secret=My%20Secret%20- 從 Webhook 網址中刪除
服務帳戶驗證:
- 確認存放區的服務帳戶已具備「必要角色」中定義的 IAM 角色,可進行服務帳戶驗證。
- 選取「啟用服務帳戶驗證」。
如果選取「推送」,則可以在「分支篩選器」欄位中輸入允許推送事件的清單。
「Branch filter」(分支篩選器) 欄位會使用 glob 模式,且只有在相符分支上執行的作業才會觸發建構。舉例來說,
{main,dev}會在推送事件觸發時,將事件推送至main和dev分支。如果該欄位空白或為*,系統會回報所有分支機構的推播事件。如要瞭解語法,請參閱 glob 說明文件。按一下 [Add Webhook]。
網頁掛鉤會顯示在「Webhooks」頁面。
REST
如要建立 Webhook,請對 hooks 端點發出 POST 要求,叫用 hooks.create 方法。您可以使用私密查詢字串或服務帳戶驗證,驗證 Webhook。
敏感查詢字串
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{ "targetUri": "https://${SERVICE_NAME}.app/webhook?key=${KEY}&secret=${SECRET}", "events": ["PUSH"] "sensitiveQueryString": "${SENSITIVE_QUERY_STRING_VALUE}" }' \ "https://securesourcemanager.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/repositories/${REPOSITORY}/hooks?hook_id=${HOOK_ID}"你的
SENSITIVE_QUERY_STRING_VALUE應為 webhook 網址中的key和secret值。舉例來說,如果key為eitIfKhYnv0LrkdsyHqIros8fbsheKRIslfsdngf,且secret為MySecret,則SENSITIVE_QUERY_STRING_VALUE應為key=eitIfKhYnv0LrkdsyHqIros8fbsheKRIslfsdngf&secret=MySecret。服務帳戶驗證
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{ "targetUri": "https://${SERVICE_NAME}.app/webhook", "events": ["PUSH"], "serviceAccountAuth": true }' \ "https://securesourcemanager.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/repositories/${REPOSITORY}/hooks?hook_id=${HOOK_ID}"
測試 Webhook
- 在 Secure Source Manager 的「Webhooks」(Webhook) 頁面中,按一下要測試的 Webhook。
前往頁面底部,然後按一下「測試傳送」。
系統會將預留位置活動新增至遞送佇列。可能需要幾秒鐘,才會顯示在運送記錄中。
您也可以使用
git指令推送或合併提取要求,藉此測試 Webhook。在設定 Webhook 觸發條件的服務中,查看觸發的建構作業或事件在建構作業記錄中的狀態。
傳送第一筆測試交付內容後,您也可以在 Secure Source Manager 的 Webhook 頁面「近期交付內容」部分,查看測試交付內容的「要求」和「回應」。
以酬載資料取代 Cloud Build YAML 變數
如果您使用 Webhook 連線至 Cloud Build,可以將 Cloud Build YAML 變數替換為 Secure Source Manager Webhook 酬載資料。
在 Secure Source Manager 的「Webhook」頁面中,點選「近期傳送」部分中的頂端資料列。
系統會顯示 Webhook 酬載傳送的「要求」標頭和內容。
前往 Cloud Build 資訊主頁,然後點選「觸發條件」。
按一下要設定的觸發條件。
在「進階」部分的「替代變數」下方,按一下「+ 新增變數」。
輸入變數的名稱和值。值前置字元為
body。舉例來說,如要將
_REPO_URL替換為酬載資料欄位repository.clone_url,並將_COMMIT_SHA替換為 Cloud Build YAML 中的最新提交 SHA,請輸入下列名稱和值:- 變數 1:
_REPO_URL值 1:$(body.repository.clone_url) - 變數 2:
_COMMIT_SHA值 2:$(body.after)
Cloud Build YAML 檔案類似於下列內容:
steps: - name: gcr.io/cloud-builders/git env: - '_REPO_URL=$_REPO_URL' - '_COMMIT_SHA=$_COMMIT_SHA' script: | #!/bin/sh git clone ${_REPO_URL} /workspace cd /workspace git reset --hard ${_COMMIT_SHA}- 變數 1: