本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立通知範例 CodeBuild
Amazon CloudWatch 活動有內置的支持 AWS CodeBuild. CloudWatch 事件是描述 AWS 資源變更的系統事件串流。透過 E CloudWatch vents,您可以撰寫宣告式規則,將感興趣的事件與要採取的自動化動作產生關聯。此範例使用 Amazon E CloudWatch vents 和 Amazon Simple Notification Service (Amazon SNS),在建置成功、失敗、從一個建置階段移至另一個階段或這些事件的任何組合時,傳送建置通知給訂閱者。
重要
執行此範例可能會導致您的 AWS 帳戶收取費用。其中包括與 Amazon CodeBuild 和 Amazon SNS 相關的 AWS 資源和動作的可能收費 CloudWatch 和費用。如需詳細資訊,請參閱CodeBuild 定價
執行範例
如何執行此範例
-
如果您已經在 Amazon SNS 中設定並訂閱了要用於此範例的主題,請跳到步驟 4。否則,如果您使用 IAM 使用者而不是 AWS 根帳戶或管理員使用者使用 Amazon SNS,請將下列陳述式 (介於
### 之間在此處開始新增陳述式 ### 和 ###
END 在此處新增陳述式 ###
) 給使用者 (或與使用者關聯的 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 傳送組建通知至此主題。
建立主題:
-
開啟 Amazon SNS 主控台,網址為 https://console.aws.amazon.com/sns
。 -
請選擇建立主題。
-
在 Create new topic (建立新主題) 中,針對 Topic name (主題名稱),輸入主題的名稱 (例如
CodeBuildDemoTopic
)。(如果您選擇其他名稱,請在此範例中全部換成此名稱。) -
請選擇建立主題。
-
在 [主題詳細資料: CodeBuildDemoTopic] 頁面上,複製 [主題 ARN] 值。您在下一個步驟中需要使用到此數值。
如需詳細資訊,請參閱 Amazon SNS 開發人員指南中的建立主題。
-
-
讓一或多個收件人訂閱主題來接收電子郵件通知。
讓收件人訂閱主題:
-
在上一個步驟開啟 Amazon SNS 主控台的情況下,在導覽窗格中選擇「訂閱」,然後選擇「建立訂閱」。
-
在 Create subscription (建立訂閱) 中,對於 Topic ARN (主題 ARN),貼上您從上個步驟複製的主題 ARN。
-
對於通訊協定,選擇電子郵件。
-
針對 Endpoint (端點),輸入收件人的完整電子郵件地址。
-
選擇 Create Subscription (建立訂閱)。
-
Amazon SNS 會傳送訂閱確認電子郵件給收件者。若要開始接收電子郵件通知,收件人必須選擇訂閱確認電子郵件中的 Confirm subscription (確認訂閱) 連結。收件者按一下連結後,如果訂閱成功,Amazon SNS 會在收件者的網頁瀏覽器中顯示確認訊息。
如需詳細資訊,請參閱 Amazon SNS 開發人員指南中的訂閱主題。
-
-
如果您使用的是使用者而非 AWS 根帳戶或管理員使用者來處理 CloudWatch 事件,請將下列陳述式 (介於
### 之間在此處開始新增陳述式 ### 和 ###
END ADD 陳述式 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 (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>'."
-
選擇 Configure details (設定詳細資訊)。
-
在 Step 2: Configure rule details (步驟 2:設定規則詳細資訊) 頁面上,輸入名稱和選填的描述。針對 State (狀態),將 Enabled (啟用) 保留為選取狀態。
-
選擇建立規則。
-
建立組建專案、執行組建,以及檢視組建資訊。
-
確認現在 CodeBuild 已成功發送構建通知。例如,檢查您的收件匣中是否有組建通知電子郵件。
若要變更規則的行為,請在 CloudWatch 主控台中選擇要變更的規則,選擇 [動作],然後選擇 [編輯]。變更規則,選擇 Configure details (設定詳細資訊),然後選擇 Update rule (更新規則)。
若要停止使用規則傳送組建通知,請在 CloudWatch 主控台中選擇要停止使用的規則,選擇 [動作],然後選擇 [停用]。
若要完全刪除規則,請在 CloudWatch 主控台中選擇要刪除的規則,選擇 [動作],然後選擇 [刪除]。
相關資源
如需開始使用的相關資訊 AWS CodeBuild,請參閱使用主控台開始使用 AWS CodeBuild。
如需有關疑難排解中問題的資訊 CodeBuild,請參閱疑難排 AWS CodeBuild。
如需中配額的相關資訊 CodeBuild,請參閱AWS CodeBuild 的配額。
建置通知輸入格式參考
CloudWatch 以 JSON 格式傳送通知。
組建狀態變更通知採用以下格式:
{ "version": "0", "id": "c030038d-8c4d-6141-9545-00ff7b7153EX", "detail-type": "CodeBuild Build State Change", "source": "aws.codebuild", "account": "123456789012", "time": "2017-09-01T16:14:28Z", "region": "us-west-2", "resources":[ "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX" ], "detail":{ "build-status": "SUCCEEDED", "project-name": "my-sample-project", "build-id": "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX", "additional-information": { "artifact": { "md5sum": "da9c44c8a9a3cd4b443126e823168fEX", "sha256sum": "6ccc2ae1df9d155ba83c597051611c42d60e09c6329dcb14a312cecc0a8e39EX", "location": "arn:aws:s3:::codebuild-123456789012-output-bucket/my-output-artifact.zip" }, "environment": { "image": "aws/codebuild/standard:5.0", "privileged-mode": false, "compute-type": "BUILD_GENERAL1_SMALL", "type": "LINUX_CONTAINER", "environment-variables": [] }, "timeout-in-minutes": 60, "build-complete": true, "initiator": "MyCodeBuildDemoUser", "build-start-time": "Sep 1, 2017 4:12:29 PM", "source": { "location": "codebuild-123456789012-input-bucket/my-input-artifact.zip", "type": "S3" }, "logs": { "group-name": "/aws/codebuild/my-sample-project", "stream-name": "8745a7a9-c340-456a-9166-edf953571bEX", "deep-link": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEvent:group=/aws/codebuild/my-sample-project;stream=8745a7a9-c340-456a-9166-edf953571bEX" }, "phases": [ { "phase-context": [], "start-time": "Sep 1, 2017 4:12:29 PM", "end-time": "Sep 1, 2017 4:12:29 PM", "duration-in-seconds": 0, "phase-type": "SUBMITTED", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:12:29 PM", "end-time": "Sep 1, 2017 4:13:05 PM", "duration-in-seconds": 36, "phase-type": "PROVISIONING", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:05 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 4, "phase-type": "DOWNLOAD_SOURCE", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 0, "phase-type": "INSTALL", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 0, "phase-type": "PRE_BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 70, "phase-type": "BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 0, "phase-type": "POST_BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 0, "phase-type": "UPLOAD_ARTIFACTS", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:26 PM", "duration-in-seconds": 4, "phase-type": "FINALIZING", "phase-status": "SUCCEEDED" }, { "start-time": "Sep 1, 2017 4:14:26 PM", "phase-type": "COMPLETED" } ] }, "current-phase": "COMPLETED", "current-phase-context": "[]", "version": "1" } }
組建階段變更通知採用以下格式:
{ "version": "0", "id": "43ddc2bd-af76-9ca5-2dc7-b695e15adeEX", "detail-type": "CodeBuild Build Phase Change", "source": "aws.codebuild", "account": "123456789012", "time": "2017-09-01T16:14:21Z", "region": "us-west-2", "resources":[ "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX" ], "detail":{ "completed-phase": "COMPLETED", "project-name": "my-sample-project", "build-id": "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX", "completed-phase-context": "[]", "additional-information": { "artifact": { "md5sum": "da9c44c8a9a3cd4b443126e823168fEX", "sha256sum": "6ccc2ae1df9d155ba83c597051611c42d60e09c6329dcb14a312cecc0a8e39EX", "location": "arn:aws:s3:::codebuild-123456789012-output-bucket/my-output-artifact.zip" }, "environment": { "image": "aws/codebuild/standard:5.0", "privileged-mode": false, "compute-type": "BUILD_GENERAL1_SMALL", "type": "LINUX_CONTAINER", "environment-variables": [] }, "timeout-in-minutes": 60, "build-complete": true, "initiator": "MyCodeBuildDemoUser", "build-start-time": "Sep 1, 2017 4:12:29 PM", "source": { "location": "codebuild-123456789012-input-bucket/my-input-artifact.zip", "type": "S3" }, "logs": { "group-name": "/aws/codebuild/my-sample-project", "stream-name": "8745a7a9-c340-456a-9166-edf953571bEX", "deep-link": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEvent:group=/aws/codebuild/my-sample-project;stream=8745a7a9-c340-456a-9166-edf953571bEX" }, "phases": [ { "phase-context": [], "start-time": "Sep 1, 2017 4:12:29 PM", "end-time": "Sep 1, 2017 4:12:29 PM", "duration-in-seconds": 0, "phase-type": "SUBMITTED", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:12:29 PM", "end-time": "Sep 1, 2017 4:13:05 PM", "duration-in-seconds": 36, "phase-type": "PROVISIONING", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:05 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 4, "phase-type": "DOWNLOAD_SOURCE", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 0, "phase-type": "INSTALL", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:13:10 PM", "duration-in-seconds": 0, "phase-type": "PRE_BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:13:10 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 70, "phase-type": "BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 0, "phase-type": "POST_BUILD", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:21 PM", "duration-in-seconds": 0, "phase-type": "UPLOAD_ARTIFACTS", "phase-status": "SUCCEEDED" }, { "phase-context": [], "start-time": "Sep 1, 2017 4:14:21 PM", "end-time": "Sep 1, 2017 4:14:26 PM", "duration-in-seconds": 4, "phase-type": "FINALIZING", "phase-status": "SUCCEEDED" }, { "start-time": "Sep 1, 2017 4:14:26 PM", "phase-type": "COMPLETED" } ] }, "completed-phase-status": "SUCCEEDED", "completed-phase-duration-seconds": 4, "version": "1", "completed-phase-start": "Sep 1, 2017 4:14:21 PM", "completed-phase-end": "Sep 1, 2017 4:14:26 PM" } }