您可以使用 Jenkins 觸發條件和 Secure Source Manager Webhook,啟動自動建構作業。
必要的角色
如要取得建立 Jenkins 建構觸發程序所需的權限,請要求管理員授予下列 IAM 角色:
- 
  
  
    
      Secure Source Manager 存放區管理員  (roles/securesourcemanager.repoAdmin) 存放區
- 
  
  
    
      Secure Source Manager 執行個體存取者   (roles/securesourcemanager.instanceAccessor) 在 Secure Source Manager 執行個體上
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
如要瞭解如何授予 Secure Source Manager 角色,請參閱「使用 IAM 控管存取權」和「授予使用者執行個體存取權」。
設定 Webhook 觸發條件
Jenkins 會使用建構觸發外掛程式啟用 CI/CD 自動化。您可以設定觸發條件來監聽傳入的事件,例如將新提交內容推送至存放區,或啟動提取要求,然後在傳入新事件時自動執行建構作業。您也可以設定觸發條件,讓系統在原始碼存放區發生任何變更時,或只有在變更符合特定條件時建構程式碼。
如要設定一般 Jenkins Webhook 觸發條件:
- 在 Jenkins 伺服器上安裝 Jenkins Git 外掛程式、SSH 憑證外掛程式和一般 Webhook 觸發外掛程式。 
- 在 Jenkins 伺服器中產生有效的 SSH 金鑰組。 Secure Source Manager 僅支援 RSA 類型的金鑰。 
- 執行下列指令,將 Secure Source Manager 執行個體網域新增至 Jenkins 伺服器 SSH - known_hosts檔案:- ssh -t git@INSTANCE_ID-INSTANCE_PROJECT_NUMBER-ssh.us-central1.sourcemanager.dev- 其中: - INSTANCE_ID 是 Secure Source Manager 執行個體的名稱。
- INSTANCE_PROJECT_NUMBER 是 Secure Source Manager 執行個體的專案號碼。如要瞭解如何找出專案編號,請參閱「識別專案」。
 - 舉例來說,下列指令會為專案編號為 - 123456789的執行個體「- prod-test-instance」新增執行個體網域。- ssh -t git@prod-test-instance-123456789-ssh.us-central1.sourcemanager.dev- 回覆 - yes,將執行個體網域新增至已知主機清單。
- 在 Jenkins 的「Manage Credentials」(管理憑證) 頁面中: - 選取「SSH username with private key」。
- 貼上 Jenkins 伺服器 SSH 私密金鑰。
- 在「類型」下拉式選單中,視需要填寫其他欄位。
 
- 點選「建立」。 
- 在 Jenkins 網頁介面中,建立新的 Jenkins 工作。 
- 在 Jenkins 工作設定頁面的「Source Code Management」部分,選取「Git」。 
- 在「Git」部分,將 Secure Source Manager 存放區 SSH 網址貼為存放區網址,輸入建構分支 (例如 - */main),然後選取您先前在「管理憑證」頁面中新增的已儲存私密 SSH 金鑰憑證。
- 在「建構觸發條件」部分,選取「一般 Webhook 觸發條件」。 - 您也可以選擇新增權杖,這樣只有在叫用時提供該權杖,才會觸發工作。如要新增權杖,請在「Generic Webhook Trigger」部分下方的「Token」欄位中輸入權杖。 
- 在「Build」(建構) 區段中,提供您要用於這項 Jenkins 工作的建構指令碼。舉例來說,您可以執行 - cat README.md來列印 README.md 的內容。
- 按一下「儲存」,即可建立 Jenkins 工作。 
設定服務帳戶並授予必要權限
- 如果您沒有要使用的服務帳戶,請建立服務帳戶。 - 請確認您具備服務帳戶的 - iam.serviceAccounts.actAs權限。這項權限屬於「服務帳戶使用者」- roles/iam.serviceAccountUser角色。
- 在 Secure Source Manager 網頁介面中,按一下「更多選項」選單。 
- 按一下「服務帳戶 SSH 金鑰」。系統會開啟「服務帳戶 SSH 金鑰」頁面,並顯示您新增的現有金鑰清單。 
- 按一下「Add key」。 
- 在「新增安全殼層金鑰」頁面中,輸入金鑰的下列值: - 服務帳戶:要搭配使用 SSH 金鑰的服務帳戶電子郵件,格式為 - SA_NAME@PROJECT_ID.iam.gserviceaccount.com- 地點 - SA_NAME是服務帳戶名稱。
- PROJECT_ID是建立服務帳戶的專案 ID。
 
- 安全殼層公開金鑰:Jenkins 公開安全殼層金鑰。 
 
授予 Secure Source Manager 服務代理權限
如果服務帳戶與 Secure Source Manager 執行個體不在同一個專案中,您也必須授予 Secure Source Manager 服務代理程式「服務帳戶權杖建立者」(roles/iam.serviceAccountTokenCreator) 角色或 iam.serviceAccounts.signJwt 權限。
如果服務帳戶與 Secure Source Manager 執行個體位於同一個專案,請跳至「授予服務帳戶存放區角色」。
- 執行下列指令,取得服務帳戶的現有 IAM 政策: - gcloud iam service-accounts get-iam-policy SERVICE_ACCOUNT \ --format json- 其中 SERVICE_ACCOUNT 是您要使用的服務帳戶。 帳戶格式應為數字服務帳戶 ID 或電子郵件地址,例如 - 123456789876543212345或- my-iam-account@somedomain.com。- 輸出內容會包含所有現有繫結,如果沒有任何繫結,則會包含類似下列內容的 - etag值:- { "etag": "BwUjHYKJUiQ=" }
- 將輸出內容複製到名為 - policy.json的新檔案。
- 如要授予 Secure Source Manager 服務代理程式「服務帳戶憑證建立者」角色 ( - roles/iam.ServiceAccountTokenCreator),請修改- policy.json,新增下列項目:- { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:service-INSTANCE_PROJECT_NUMBER@gcp-sa-sourcemanager.iam.gserviceaccount.com" ] }- 其中 - INSTANCE_PROJECT_NUMBER是 Secure Source Manager 執行個體的專案號碼。
- 執行下列指令,替換服務帳戶的現有 IAM 政策: - gcloud iam service-accounts set-iam-policy SERVICE_ACCOUNT POLICY_FILE- 更改下列內容: - SERVICE_ACCOUNT,並提供服務帳戶 ID 或電子郵件地址。
- POLICY_FILE,並提供包含新政策的 JSON 格式檔案位置和名稱。
 
授予服務帳戶存放區角色
- 在 Secure Source Manager 網頁介面中,前往要授予服務帳戶權限的存放區。
- 按一下「Permissions」(權限) 分頁標籤。
- 按一下「新增使用者」。
- 在「新增主體」欄位中,輸入服務帳戶的電子郵件地址。
- 在「Role」(角色) 下拉式選單中,選取「Secure Source Manager Repository Reader」(安全來源管理員存放區讀者)。
- 執行下列指令,將 - securesourcemanager.instanceAccessor角色指派給服務帳戶:- gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SA_EMAIL \ --role=roles/securesourcemanager.instanceAccessor- 更改下列內容: - 將 PROJECT_ID替換為 Secure Source Manager 執行個體專案 ID。
- SA_EMAIL替換為服務帳戶電子郵件地址。
 
- 將 
設定 Webhook
- 在 Secure Source Manager 網頁介面中,前往要建立 Webhook 的存放區。
- 按一下「設定」。
- 按一下「Webhook」,然後按一下「新增 Webhook」。
- 在「Hook ID」(Webhook ID) 欄位中,輸入 Webhook 的 ID。 
- 在「目標網址」欄位中,輸入 Jenkins 觸發網址。 
- 如果您在設定 Jenkins 觸發程序時使用了選用權杖,Jenkins 觸發程序網址的結尾就會包含該權杖。為避免權杖外洩,請從目標網址結尾移除權杖,然後複製到「敏感查詢字串」欄位。 - 如要在觸發網址中找出權杖,請尋找以 - token=開頭的文字。- 舉例來說,如果您的網址類似於下列網址: - https://jenkins-server.com/generic-webhook-trigger/invoke?token=jenkins-job1- 從「目標網址」欄位中,複製並移除以問號開頭的部分。 - ?token=jenkins-job1然後移除開頭的問號,將剩餘部分- token=jenkins-job1移至「Sensitive Query String」(機密查詢字串) 欄位。
- 在「觸發條件」部分,選取下列其中一個選項: - 推送:在推送至存放區時觸發。
- 提取要求狀態已變更:在提取要求狀態變更時觸發。
 
- 如果您選取「推送」,則可以在「分支版本篩選器」欄位中,輸入推送事件的允許清單。 - 「Branch filter」(分支篩選器) 欄位會使用 glob 模式,只有在相符分支上執行的作業才會觸發建構。如果欄位空白或為 - *,系統就會回報所有分支機構的推播事件。
- 按一下 [Add Webhook]。 
- Webhook 會顯示在「Webhooks」頁面。 
測試 Webhook
- 在 Secure Source Manager 的「Webhooks」(Webhook) 頁面中,按一下要測試的 Webhook。
- 前往頁面底部,然後按一下「測試傳送」。 - 系統會將虛假事件加入傳送佇列。系統可能需要幾秒鐘才會在運送記錄中顯示。 
- 您也可以使用 - git指令推送或合併提取要求,測試 Webhook。
- 在 Jenkins 專案中,查看「Build History」(建構記錄) 中由測試事件觸發的建構作業。 
- 傳送第一筆測試遞送後,您也可以在安全來源管理工具網頁的「近期遞送」部分,查看測試遞送的「要求」和「回應」。 
後續步驟
- 參閱 Jenkins 說明文件。