本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立通知範例 CodeBuild
Amazon CloudWatch 活動有內置的支持 AWS CodeBuild. CloudWatch 事件是描述 AWS 資源變更的系統事件串流。透過 E CloudWatch vents,您可以撰寫宣告式規則,將感興趣的事件與要採取的自動化動作產生關聯。此範例使用 Amazon E CloudWatch vents 和 Amazon 簡單通知服務 (AmazonSNS),在建置成功、失敗、從一個建置階段移至另一個階段或這些事件的任何組合時,傳送建置通知給訂閱者。
重要
執行此範例可能會導致您的 AWS 帳戶收取費用。這些措施包括與 Amazon CodeBuild 和 Amazon CloudWatch 相關的 AWS 資源和操作的可能收費SNS。如需詳細資訊,請參閱CodeBuild 定 CloudWatch
運行構建通知示例
請使用下列程序來執行組建通知範例。
如何執行此範例
-
如果您已經在 Amazon 中設定並訂閱了SNS要用於此範例的主題,請跳到步驟 4。否則,如果您使用的是用IAM戶而不是 AWS 根帳戶或管理員用戶來使用 AmazonSNS,請添加以下語句(介於
### BEGIN ADDING STATEMENT HERE ###
以及### END ADDING STATEMENT HERE ###
) 給使用者 (或與使用者關聯的IAM群組)。不建議使用 AWS 根帳號。此聲明可讓您檢視、建立、訂閱和測試傳送 Amazon SNS 主題的通知。省略符號 (...
) 用於簡化和協助您找到新增陳述式的位置。請不要移除任何陳述式,也不要在現有政策中輸入這些省略符號。{ "Statement": [
### BEGIN ADDING STATEMENT HERE ###
{ "Action": [ "sns:CreateTopic", "sns:GetTopicAttributes", "sns:List*", "sns:Publish", "sns:SetTopicAttributes", "sns:Subscribe" ], "Resource": "*", "Effect": "Allow" },### END ADDING STATEMENT HERE ###
... ], "Version": "2012-10-17" } -
在 Amazon 中創建或識別主題SNS。 AWS CodeBuild 使用 CloudWatch 事件透過 Amazon 傳送組建通知給此主題SNS。
建立主題:
-
在 https://console.aws.amazon.com/sns
開啟 Amazon SNS 主控台。 -
請選擇建立主題。
-
在 Create new topic (建立新主題) 中,針對 Topic name (主題名稱),輸入主題的名稱 (例如
CodeBuildDemoTopic
)。(如果您選擇其他名稱,請在此範例中全部換成此名稱。) -
請選擇建立主題。
-
在 [主題詳細資料: CodeBuildDemoTopic] 頁面上,複製 [主題] ARN 值。您在下一個步驟中需要使用到此數值。
如需詳細資訊,請參閱 Amazon SNS 開發人員指南中的建立主題。
-
-
讓一或多個收件人訂閱主題來接收電子郵件通知。
讓收件人訂閱主題:
-
在上一個步驟開啟 Amazon SNS 主控台的情況下,在導覽窗格中選擇「訂閱」,然後選擇「建立訂閱」。
-
在 [建立訂閱] 中,對於 [主題]ARN,貼上ARN您從上一個步驟複製的主題。
-
對於通訊協定,選擇電子郵件。
-
針對 Endpoint (端點),輸入收件人的完整電子郵件地址。
-
選擇 Create Subscription (建立訂閱)。
-
Amazon SNS 會傳送訂閱確認電子郵件給收件人。若要開始接收電子郵件通知,收件人必須選擇訂閱確認電子郵件中的 Confirm subscription (確認訂閱) 連結。收件者按一下連結後,如果訂閱成功,Amazon SNS 會在收件者的網頁瀏覽器中顯示確認訊息。
如需詳細資訊,請參閱 Amazon SNS 開發人員指南中的訂閱主題。
-
-
如果您使用的是使用者而非 AWS 根帳號或管理員使用者來處理 CloudWatch 事件,請新增下列陳述式 (介於
### BEGIN ADDING STATEMENT HERE ###
以及### END ADDING STATEMENT HERE ###
) 給使用者 (或與使用者關聯的IAM群組)。不建議使用 AWS 根帳號。該語句用於允許用戶與 CloudWatch 事件的工作。省略符號 (...
) 用於簡化和協助您找到新增陳述式的位置。請不要移除任何陳述式,也不要在現有政策中輸入這些省略符號。{ "Statement": [
### BEGIN ADDING STATEMENT HERE ###
{ "Action": [ "events:*", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" },### END ADDING STATEMENT HERE ###
... ], "Version": "2012-10-17" } -
在 CloudWatch 事件中建立規則。要做到這一點,打開 CloudWatch 控制台,在 https://console.aws.amazon.com/cloudwatch
。 -
在導覽窗格中,在 Events (事件) 下方選擇 Rules (規則),然後選擇 Create rule (建立規則)。
-
在 Step 1: Create rule page (步驟 1:建立規則頁面) 上,應該已選取 Event Pattern (事件模式) 和 Build event pattern to match events by service (建構事件的模式,依服務來匹配事件)。
-
在 Service Name (服務名稱) 中,選擇 CodeBuild。在 Event Type (事件類型) 中,應該已選取 All Events (所有事件)。
-
下列程式碼應顯示於 Event Pattern Preview (事件模式預覽) 中:
{ "source": [ "aws.codebuild" ] }
-
選擇 Edit (編輯),將 Event Pattern Preview (事件模式預覽) 中的程式碼換成下列兩個規則模式之一。
AWS CodeBuild中指定的建置專案有建置開始或完成時,這第一個規則模式就會觸發事件。
{ "source": [ "aws.codebuild" ], "detail-type": [ "CodeBuild Build State Change" ], "detail": { "build-status": [ "IN_PROGRESS", "SUCCEEDED", "FAILED", "STOPPED" ], "project-name": [ "
my-demo-project-1
", "my-demo-project-2
" ] } }在上個規則中,依需要進行下列程式碼變更。
-
若要在有建置開始或完成時觸發事件,請保留
build-status
陣列中所示的所有值,或移除整個build-status
陣列。 -
若只要在組建完成時才觸發事件,請從
build-status
陣列中移除IN_PROGRESS
。 -
若只要在組建開始時才觸發事件,請從
build-status
陣列中移除所有值,但保留IN_PROGRESS
。 -
若要對所有組建專案觸發事件,請移除整個
project-name
陣列。 -
若只要對個別組建專案觸發事件,請在
project-name
陣列中指定每個組建專案的名稱。
每當 AWS CodeBuild中指定的建置專案有建置從一個建置階段進入另一個建置階段時,這第二個規則模式就會觸發事件。
{ "source": [ "aws.codebuild" ], "detail-type": [ "CodeBuild Build Phase Change" ], "detail": { "completed-phase": [ "SUBMITTED", "PROVISIONING", "DOWNLOAD_SOURCE", "INSTALL", "PRE_BUILD", "BUILD", "POST_BUILD", "UPLOAD_ARTIFACTS", "FINALIZING" ], "completed-phase-status": [ "TIMED_OUT", "STOPPED", "FAILED", "SUCCEEDED", "FAULT", "CLIENT_ERROR" ], "project-name": [ "
my-demo-project-1
", "my-demo-project-2
" ] } }在上個規則中,依需要進行下列程式碼變更。
-
若要在每次建置階段變更時觸發事件 (對每個建置,最多可傳送九次通知),請保留
completed-phase
陣列中所示的所有值,或移除整個completed-phase
陣列。 -
若只要對個別組建階段變更來觸發事件,請在
completed-phase
陣列中移除您不想觸發事件的每個組建階段的名稱。 -
若要在每次組建階段狀態變更時觸發事件,請保留
completed-phase-status
陣列中所示的全部值,或移除整個completed-phase-status
陣列。 -
若只要對個別組建階段狀態變更來觸發事件,請在
completed-phase-status
陣列中移除您不想觸發事件的每個組建階段狀態的名稱。 -
若要對所有組建專案觸發事件,請移除
project-name
陣列。 -
若要對個別組建專案觸發事件,請在
project-name
陣列中指定每個組建專案的名稱。
如需有關事件模式的詳細資訊,請參閱 Amazon EventBridge 使用者指南中的事件模式。
如需使用事件模式篩選的詳細資訊,請參閱 Amazon EventBridge 使用者指南中的以事件模式篩選的內容型篩選。
注意
如果希望建置狀態變更和建置階段變更都觸發事件,您必須建立兩個不同的規則:一個用於建置狀態變更,另一個用於建置階段變更。如果您嘗試將兩個規則合併成單一規則,合併的規則可能產生非預期的結果,或完全停止運作。
完成取代程式碼時,選擇 Save (儲存)。
-
-
在 Targets (目標) 中,選擇 Add target (新增目標)。
-
在目標清單中,選擇SNS主題。
-
對於 Topic (主題),選擇您稍早識別或建立的主題。
-
展開 Configure input (設定輸入),然後選擇 Input Transformer (輸入轉換器)。
-
在 Input Path (輸入路徑) 方塊中,輸入下列其中一個輸入路徑。
如果規則的
detail-type
值為CodeBuild Build State Change
,請輸入下列程式碼。{"build-id":"$.detail.build-id","project-name":"$.detail.project-name","build-status":"$.detail.build-status"}
如果規則的
detail-type
值為CodeBuild Build Phase Change
,請輸入下列程式碼。{"build-id":"$.detail.build-id","project-name":"$.detail.project-name","completed-phase":"$.detail.completed-phase","completed-phase-status":"$.detail.completed-phase-status"}
如需其他類型的資訊,請參閱建置通知輸入格式參考。
-
在 Input Template (輸入範本) 方塊中,輸入下列其中一個輸入範本。
如果規則的
detail-type
值為CodeBuild Build State Change
,請輸入下列程式碼。"Build '<build-id>' for build project '<project-name>' has reached the build status of '<build-status>'."
如果規則的
detail-type
值為CodeBuild Build Phase Change
,請輸入下列程式碼。"Build '<build-id>' for build project '<project-name>' has completed the build phase of '<completed-phase>' with a status of '<completed-phase-status>'."
-
選擇設定詳細資訊。
-
在 Step 2: Configure rule details (步驟 2:設定規則詳細資訊) 頁面上,輸入名稱和選填的描述。針對 State (狀態),將 Enabled (啟用) 保留為選取狀態。
-
選擇建立規則。
-
建立組建專案、執行組建,以及檢視組建資訊。
-
確認現在 CodeBuild 已成功發送構建通知。例如,檢查您的收件匣中是否有組建通知電子郵件。
若要變更規則的行為,請在 CloudWatch 主控台中選擇要變更的規則,選擇 [動作],然後選擇 [編輯]。變更規則,選擇 Configure details (設定詳細資訊),然後選擇 Update rule (更新規則)。
若要停止使用規則傳送組建通知,請在 CloudWatch 主控台中選擇要停止使用的規則,選擇 [動作],然後選擇 [停用]。
若要完全刪除規則,請在 CloudWatch 主控台中選擇要刪除的規則,選擇 [動作],然後選擇 [刪除]。