適用於 的建置通知範例 CodeBuild - AWS CodeBuild

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

適用於 的建置通知範例 CodeBuild

亞馬遜 CloudWatch 事件具有AWS CodeBuild。 CloudWatch Events 是系統事件流,其會描述AWS的費用。搭配 CloudWatch 事件,您會撰寫宣告式規則,以將感興趣的事件與要採取的自動化動作關聯。此範例使用 Amazon CloudWatch 事件和 Amazon SSimple Notification Service (Amazon SNS),每當建置成功、失敗、從一個建置階段進入另一個建置階段時,或這些事件的任意組合發生時,就發生建置通知給訂者。

重要

執行此範例可能會對您的 AWS 帳戶收取費用。收費的項目可能包括 CodeBuild 和AWS與亞馬遜相關的資源和操作 CloudWatch 和 Amazon SNS。如需詳細資訊,請參閱「」CodeBuild 定價Amazon CloudWatch 定價,和Amazon SNS 定價

執行範例

如何執行此範例

  1. 如果您在 Amazon SNS 中已設定並訂想要用於此範例的主題,請跳至步驟 4。否則,如果您使用的是 IAM 用户而不是AWS根賬户或管理員 IAM 用户使用 Amazon SNS,請添加以下語句(介於### 開始在這裏添加語句 ###### 結束在這裏添加語句 ###)添加到用户(或與用户關聯的 IAM 組)。不建議使用 AWS 根帳戶。此陳述式可讓您在 Amazon SNS 中查看、建立、訂和測試通知發送至 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" }
    注意

    修改此政策的 IAM 實體在 IAM 中必須有許可來修改政策。

    如需詳細資訊,請參閱「」編輯客户受管政策或是中的「若要為羣組、使用者或角色編輯或刪除內嵌政策」使用內嵌政策 (主控台)中的IAM User Guide

  2. 在 Amazon SNS 中建立或識別主題。AWS CodeBuild使用 CloudWatch 通過 Amazon SNS 將建置通知傳送至本主題的事件。

    建立主題:

    1. 在開啟 Amazon SNS 主控台https://console.aws.amazon.com/sns

    2. 請選擇 Create topic (建立主題)。

    3. Create new topic (建立新主題) 中,針對 Topic name (主題名稱),輸入主題的名稱 (例如 CodeBuildDemoTopic)。(如果您選擇其他名稱,請在此範例中全部換成此名稱。)

    4. 請選擇 Create topic (建立主題)。

    5. 主題詳細信息:代碼構建解碼主題頁面上,複製ARN 主題值。您在下一個步驟中需要使用到此數值。

    如需詳細資訊,請參閱「」建立主題中的Amazon SNS 開發人員指南

  3. 讓一或多個收件人訂閱主題來接收電子郵件通知。

    讓收件人訂閱主題:

    1. 自上個步驟開啟的 Amazon SNS 主控台,從導覽窗格中選擇訂閱選擇,接著選擇建立訂

    2. Create subscription (建立訂閱) 中,對於 Topic ARN (主題 ARN),貼上您從上個步驟複製的主題 ARN。

    3. 對於 Protocol (通訊協定),選擇 Email (電子郵件)。

    4. 針對 ​Endpoint (端點),輸入收件人的完整電子郵件地址。

    5. 選擇 Create Subscription (建立訂閱)。

    6. Amazon SNS 會將訂確認電子郵件傳送給收件人。若要開始接收電子郵件通知,收件人必須選擇訂閱確認電子郵件中的 Confirm subscription (確認訂閱) 連結。在收件人按一下連結後,若訂成功,Amazon SNS 會在收件人的 Web 瀏覽器中顯示確認消息。

    如需詳細資訊,請參閱「」訂閱主題中的Amazon SNS 開發人員指南

  4. 如果您使用的是 IAM 用户而不是AWS根賬户或管理員 IAM 用户以使用 CloudWatch 事件,請添加以下語句(介於### 開始在這裏添加語句 ###### 結束在這裏添加語句 ###)添加到用户(或與用户關聯的 IAM 組)。不建議使用 AWS 根帳戶。此陳述式是用來允許使用者使用 CloudWatch 事件 省略符號 (...) 用於簡化和協助您找到新增陳述式的位置。請不要移除任何陳述式,也不要在現有政策中輸入這些省略符號。

    { "Statement": [ ### BEGIN ADDING STATEMENT HERE ### { "Action": [ "events:*", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" }, ### END ADDING STATEMENT HERE ### ... ], "Version": "2012-10-17" }
    注意

    修改此政策的 IAM 實體在 IAM 中必須有許可來修改政策。

    如需詳細資訊,請參閱「」編輯客户受管政策或是中的「若要為羣組、使用者或角色編輯或刪除內嵌政策」使用內嵌政策 (主控台)中的IAM User Guide

  5. 在中建立規則 CloudWatch 事件 若要執行此作業,請打開 CloudWatch 主控台,位於https://console.aws.amazon.com/cloudwatch

  6. 在導覽窗格中,在 Events (事件) 下方選擇 Rules (規則),然後選擇 Create rule (建立規則)

  7. 步驟 1:建立規則頁面事件模式建立事件模式,依服務來匹配事件應該已選擇。

  8. 適用於服務名稱,選擇CodeBuild。在 Event Type (事件類型) 中,應該已選取 All Events (所有事件)

  9. 下列程式碼應顯示於 Event Pattern Preview (事件模式預覽) 中:

    { "source": [ "aws.codebuild" ] }
  10. 選擇 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 陣列中指定每個組建專案的名稱。

    如需事件模式的詳細資訊,請參事件模式在卓越亞馬遜 EventBridge 使用者指南。

    如需有關使用事件模式篩選的詳細資訊,請參具有事件模式的內容式篩選在卓越亞馬遜 EventBridge 使用者指南。

    注意

    如果希望建置狀態變更和建置階段變更都觸發事件,您必須建立兩個不同的規則:一個用於建置狀態變更,另一個用於建置階段變更。如果您嘗試將兩個規則合併成單一規則,合併的規則可能產生非預期的結果,或完全停止運作。

    完成取代程式碼時,選擇 Save (儲存)

  11. Targets (目標) 中,選擇 Add target (新增目標)

  12. 在目標清單中,選擇 ​SNS topic (SNS 主題)

  13. 對於 Topic (主題),選擇您稍早識別或建立的主題。

  14. 展開 ​Configure input (設定輸入),然後選擇 ​Input Transformer (輸入轉換器)

  15. ​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"}

    如需其他類型的資訊,請參閱建置通知輸入格式參考

  16. ​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>'."
  17. 選擇 Configure details (設定詳細資訊)

  18. 步驟 2:設定規則的詳細資訊頁面上,輸入名稱和選填的描述。針對 State (狀態),將 Enabled (啟用) 保留為選取狀態。

  19. 選擇 Create rule (建立規則)

  20. 按照執行執行 CodeBuild中的步驟進行,以建立建置專案、執行建置和檢視建置資訊。

  21. 確認 CodeBuild 現在成功傳送建置通知。例如,檢查您的收件匣中是否有組建通知電子郵件。

要更改規則的行為,請在 CloudWatch 主控台上,選擇您要更改的規則,選擇動作選擇,接著選擇Edit (編輯)。變更規則,選擇 ​Configure details (設定詳細資訊),然後選擇 ​Update rule (更新規則)

若要停止使用規則來發送組建通知,請在 CloudWatch 主控台上,選擇您要停止使用的規則,選擇動作選擇,接著選擇Disable

若要完全刪除規則,請在 CloudWatch 主控台上,選擇您要刪除的規則,選擇動作選擇,接著選擇刪除

相關資源

建置通知輸入格式參考

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:4.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:4.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" } }