适用于 CodeBuild 的构建通知示例
Amazon CloudWatch Events 内置有对 Amazon CodeBuild 的支持。CloudWatch Events 提供系统事件流,这些事件描述 Amazon 资源的更改。利用 CloudWatch Events,您可以写入声明性规则,以将相关事件与要执行的自动操作关联。每当构建成功、失败、从一个构建阶段转到另一个构建阶段或出现这些事件的任意组合时,本示例都会使用 Amazon CloudWatch Events 和 Amazon Simple Notification Service(Amazon SNS)向订阅者发送构建通知。
重要
运行该示例可能会导致您的 Amazon 账户产生相关费用。这包括 CodeBuild 可能产生的费用,以及与 Amazon CloudWatch 和 Amazon SNS 相关的 Amazon 资源和操作可能产生的费用。有关更多信息,请参阅 CodeBuild 定价
运行构建通知示例
按照以下过程运行构建通知示例。
要运行此示例,请执行以下操作:
-
如果您已在 Amazon SNS 中设置并订阅用于此示例的主题,请跳至第 4 步。如果您通过 IAM 用户而不是 Amazon 根账户或管理员用户来使用 Amazon SNS,请向用户(或与用户关联的 IAM 组)添加以下语句(在
### BEGIN ADDING STATEMENT HERE ###
和### END ADDING STATEMENT HERE ###
之间)。建议不使用 Amazon 根账户。此语句可用于查看、创建、订阅和测试向 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 用户指南》的使用内联策略(控制台) 中的“编辑或删除组、用户或角色的内联策略”部分。
-
在 Amazon SNS 中创建或标识主题。Amazon CodeBuild 将使用 CloudWatch Events 通过 Amazon SNS 向该主题发送构建通知。
要创建主题,请执行以下操作:
-
通过以下网址打开 Amazon SNS 控制台:https://console.aws.amazon.com/sns
。 -
选择创建主题。
-
在创建新主题对话框中,为主题名称输入主题的名称(例如
CodeBuildDemoTopic
)。(如果您选择了其他名称,请用该名称替换掉本示例中对应的名称。) -
选择创建主题。
-
在主题详细信息:CodeBuildDemoTopic 页面上,复制主题 ARN 值。在下一个步骤中,您需要用到此值。
有关更多信息,请参阅《Amazon SNS 开发人员指南》中的创建主题。
-
-
为一个或多个收件人订阅主题以接收电子邮件通知。
为收件人订阅主题:
-
使用上一步中打开的 Amazon SNS 控制台,在导航窗格中,选择订阅,然后选择创建订阅。
-
在创建订阅中,对于主题 ARN,粘贴您在上一步中复制的主题 ARN。
-
对于协议,选择电子邮件。
-
对于端点,输入收件人的完整电子邮件地址。
-
选择创建订阅。
-
Amazon SNS 向收件人发送订阅确认电子邮件。要开始接收电子邮件通知,收件人必须在订阅确认电子邮件中选择确认订阅链接。在收件人单击该链接后,如果成功订阅,Amazon SNS 将在收件人的 Web 浏览器中显示一条确认消息。
有关更多信息,请参阅《Amazon SNS 开发人员指南》中的订阅主题。
-
-
如果您通过用户而不是 Amazon 根账户或管理员用户来使用 CloudWatch Events,请向用户(或与用户关联的 IAM 组)添加以下语句(在
### BEGIN ADDING STATEMENT HERE ###
和### END ADDING STATEMENT HERE ###
之间)。建议不使用 Amazon 根账户。此语句用于允许用户使用 CloudWatch Events。为了简洁起见,也为了帮您查找添加语句的位置,此处使用了省略号 (...
)。请勿删除任何语句,也不要将这些省略号键入现有策略中。{ "Statement": [
### BEGIN ADDING STATEMENT HERE ###
{ "Action": [ "events:*", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" },### END ADDING STATEMENT HERE ###
... ], "Version": "2012-10-17" }注意
修改该策略的 IAM 实体必须拥有在 IAM 中修改策略的权限。
有关更多信息,请参阅编辑客户托管策略或《IAM 用户指南》的使用内联策略(控制台) 中的“编辑或删除组、用户或角色的内联策略”部分。
-
在 CloudWatch Events 中创建规则。要执行此操作,通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch
。 -
在导航窗格中的事件下,选择规则,然后选择创建规则。
-
在步骤 1:创建规则页面上,事件模式和构建事件模式以按服务匹配事件应已选中。
-
对于服务名称,请选择 CodeBuild。对于事件类型,所有事件应已选中。
-
事件模式预览中应显示以下代码:
{ "source": [ "aws.codebuild" ] }
-
选择编辑并将事件模式预览中的代码替换为以下两个规则模式之一。
每当一个构建开始或完成时,第一个规则模式就会为 Amazon 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
阵列中指定每个构建项目的名称。
每当构建从一个构建阶段转到另一个构建阶段时,第二个规则模式将为 Amazon 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
" ] } }在前面的规则中,根据需要更改以下代码。
-
要为每个构建阶段更改触发一个事件(这可以为每个构建发送最多 9 条通知),请保留
completed-phase
数组中显示的所有值,或删除整个completed-phase
数组。 -
要仅针对单个构建阶段更改触发事件,请删除
completed-phase
阵列中您不希望为其触发事件的每个构建阶段的名称。 -
要针对所有构建阶段状态更改触发事件,请保留
completed-phase-status
阵列中显示的所有值,或删除整个completed-phase-status
阵列。 -
要仅针对单个构建阶段状态更改触发事件,请删除
completed-phase-status
阵列中您不希望对其触发事件的每个构建阶段状态的名称。 -
要为所有构建项目触发事件,请删除
project-name
阵列。 -
要为单个构建项目触发事件,请在
project-name
阵列中指定每个构建项目的名称。
有关事件模式的更多信息,请参阅《Amazon EventBridge 用户指南》中的事件模式。
有关使用事件模式筛选的更多信息,请参阅《Amazon EventBridge 用户指南》中的使用事件模式进行基于内容的筛选。
注意
如果要同时为构建状态更改和构建阶段更改触发事件,则必须创建两个单独的规则:一个针对构建状态更改,另一个针对构建阶段更改。如果您尝试将两个规则合并为一个规则,则合并后的规则可能产生意外结果或停止协作。
替换完代码后,选择保存。
-
-
对于目标,选择添加目标。
-
在目标列表中,选择 SNS 主题。
-
对于话题,选择您之前标识或创建的主题。
-
展开配置输入,然后选择输入转换器。
-
在输入路径框中,输入以下输入路径之一。
对于
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"}
要获取其他类型的信息,请参阅构建通知输入格式参考。
-
在输入模板框中,输入以下输入模板之一。
对于
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>'."
-
选择配置详细信息。
-
在步骤 2:配置规则详细信息页面上,输入名称和可选描述。对于状态,将已启用保持选中状态。
-
选择创建规则。
-
创建构建项目、运行构建和查看构建信息。
-
确认 CodeBuild 立即成功发送构建通知。例如,检查您的收件箱中现在是否有构建通知电子邮件。
要更改规则的行为,请在 CloudWatch 控制台中,选择要更改的规则,然后依次选择操作和编辑。对该规则进行更改,选择配置详细信息,然后选择更新规则。
要停止使用规则发送构建通知,请在 CloudWatch 控制台中,选择要停止使用的规则,然后依次选择操作和禁用。
要删除整个规则,请在 CloudWatch 控制台中,选择要删除的规则,然后依次选择操作和删除。