AWS CodeCommit 不再向新客户提供。 AWS CodeCommit 的现有客户可以继续正常使用该服务。了解更多
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
示例:为 Amazon SNS 主题创建 AWS CodeCommit 触发器
您可以为存储库创建触发器,以便该 CodeCommit 存储库中的事件触发来自亚马逊简单通知服务 (AmazonSNS) 主题的通知。您可能需要为 Amazon SNS 主题创建触发器,以使用户能够订阅有关存储库事件(例如删除分支)的通知。您还可以利用亚马逊SNS主题与其他服务的集成,例如亚马逊简单队列服务 (AmazonSQS) 和 AWS Lambda。
注意
您必须将触发器指向现有 Amazon SNS 主题,即为响应存储库事件而采取的操作。有关创建和订阅亚马逊SNS主题的更多信息,请参阅亚马逊简单通知服务入门。
CodeCommit 触发器不支持 Amazon SNSFIFO(先入先出)主题。
为 CodeCommit存储库(控制台)创建 Amazon SNS 主题的触发器
在 https://console.aws.amazon.com/codesuite/codemmit
/home 打开 CodeCommit 控制台。 -
从存储库 中,选择要创建存储库事件触发器的存储库。
-
在存储库的导航窗格中,选择设置,然后选择触发器。
-
选择创建触发器,然后执行以下操作:
-
在触发器名称中,输入触发器的名称(例如
MyFirstTrigger
)。 -
在事件中,选择触发 Amazon SNS 主题发送通知的存储库事件。
如果选择 All repository events,则无法选择任何其他事件。要选择事件的子集,请删除 All repository events,然后从列表中选择一个或多个事件。例如,如果希望触发器只在用户在 CodeCommit 存储库中创建分支或标签时运行,请删除所有存储库事件,然后选择创建分支或标记。
-
如果希望触发器应用于存储库的所有分支,请在分支中,将选定内容保留为空,因为此默认选项会自动将触发器应用于所有分支。如果您希望此触发器仅应用于特定分支,请从存储库分支列表中选择最多 10 个分支名称。
-
在 “选择要使用的服务” 中,选择 Amazon SNS。
-
在 Amazon 中SNS,从列表中选择一个主题名称或ARN为该主题输入。
注意
CodeCommit 触发器不支持 Amazon SNSFIFO(先入先出)主题。您必须选择类型设置为 “标准” 的 Amazon SNS 主题。
-
在自定义数据中,提供您希望包含在 Amazon SNS 主题发送的通知中的任何可选信息(例如,开发者在此存储库中讨论开发时使用的IRC频道名称)。该字段是一个字符串。它不能用于传递任何动态参数。
-
-
(可选)选择测试触发器。此步骤可帮助您确认是否正确配置了与 Amazon SNS 主题 CodeCommit 之间的访问权限。它使用 Amazon SNS 主题使用您存储库中的数据(如果有)发送测试通知。如果没有真实数据可用,测试通知将包含示例数据。
-
选择创建触发器以完成触发器的创建操作。
为 CodeCommit 存储库创建 Amazon SNS 主题的触发器 (AWS CLI)
您还可以使用命令行为 Amazon SNS 主题创建触发器,以响应 CodeCommit 存储库事件,例如有人向您的存储库推送提交时。
为 Amazon SNS 主题创建触发器
-
打开纯文本编辑器并创建一个指定以下内容的JSON文件:
-
Amazon SNS 主题名称。
注意
CodeCommit 触发器不支持 Amazon SNSFIFO(先入先出)主题。您必须选择类型设置为 “标准” 的 Amazon SNS 主题。
-
要用该触发器监控的存储库和分支。(如果没有指定任何分支,触发器将应用到存储库中的所有分支。)
-
激活该触发器的事件。
保存该文件。
例如,要为名为的存储库创建触发器
MyDemoRepo
,该存储库将所有存储库事件发布到名MySNSTopic
为两个分支的 Amazon SNS 主题,main
然后preprod
:{ "repositoryName": "
MyDemoRepo
", "triggers": [ { "name": "MyFirstTrigger
", "destinationArn": "arn:aws:sns:us-east-2
:111122223333
:MySNSTopic
", "customData": "", "branches": [ "main
", "preprod
" ], "events": [ "all" ] } ] }存储库的每个触发器中JSON都必须有一个触发器块。要为存储库创建多个触发器,请在中添加多个触发器块JSON。请记住,在该文件中创建的所有触发器都用于指定的存储库。您不能在单个JSON文件中为多个存储库创建触发器。例如,如果要为存储库创建两个触发器,则可以创建一个包含两个触发器块的JSON文件。在下面的示例中,没有为第二个触发器指定任何分支,因此,该触发器将应用到所有分支:
{ "repositoryName": "
MyDemoRepo
", "triggers": [ { "name": "MyFirstTrigger
", "destinationArn": "arn:aws:sns:us-east-2
:111122223333
:MySNSTopic
", "customData": "", "branches": [ "main
", "preprod
" ], "events": [ "all" ] }, { "name": "MySecondTrigger
", "destinationArn": "arn:aws:sns:us-east-2
:111122223333
:MySNSTopic2
", "customData": "", "branches": [], "events": [ "updateReference", "deleteReference" ] } ] }您可以为指定的事件 (例如,向存储库推送提交时) 创建触发器。事件类型包括:
-
all
:指定存储库和分支中的所有事件。 -
updateReference
:向指定存储库和分支推送提交时。 -
createReference
:在指定存储库中创建新的分支或标签时。 -
deleteReference
:在指定存储库中删除分支或标签时。
注意
您可以在触发器中使用多种事件类型。但如果指定
all
,就无法再指定其他事件。要查看有效事件类型的完整列表,请在终端或命令提示符处输入 aws codecommit put-repository-triggers help。
此外,你可以在中加入一个字符串
customData
(例如,开发者在讨论此存储库中的开发时使用的IRC频道名称)。该字段是一个字符串。它不能用于传递任何动态参数。此字符串作为属性附加到为响应触发器而 CodeCommit JSON返回的字符串中。 -
(可选)在终端或命令提示符处,运行 test-repository-triggers 命令。此测试使用存储库中的示例数据(如果没有可用数据,则生成示例数据)向 Amazon SNS 主题的订阅者发送通知。例如,以下内容用于测试触发器文件JSON中名为的
trigger.json
是否有效以及该文件是否 CodeCommit 可以发布到 Amazon SNS 主题:aws codecommit test-repository-triggers --cli-input-json file://
trigger.json
如果成功,该命令返回类似以下内容的信息:
{ "successfulExecutions": [ "
MyFirstTrigger
" ], "failedExecutions": [] }-
在终端或命令提示符中,运行 put-repository-triggers 命令在 CodeCommit 中创建触发器。例如,要使用名为JSON的文件
trigger.json
来创建触发器,请执行以下操作:aws codecommit put-repository-triggers --cli-input-json file://
trigger.json
该命令将返回与以下示例类似的配置 ID:
{ "configurationId": "
0123456-I-AM-AN-EXAMPLE
" } -
要查看触发器的配置,请运行 get-repository-triggers 命令,并指定存储库的名称:
aws codecommit get-repository-triggers --repository-name
MyDemoRepo
该命令返回为存储库配置的所有触发器的结构,类似于以下内容:
{ "configurationId": "
0123456-I-AM-AN-EXAMPLE
", "triggers": [ { "events": [ "all" ], "destinationArn": "arn:aws:sns:us-east-2
:111122223333
:MySNSTopic
", "branches": [ "main
", "preprod
" ], "name": "MyFirstTrigger
", "customData": "Project ID 12345" } ] } -
要测试触发器本身的功能,请生成并向配置该触发器的存储库推送一个提交。您应该会看到来自 Amazon SNS 主题的回复。例如,如果您将 Amazon SNS 主题配置为发送电子邮件,则订阅该主题的电子邮件账户SNS中应该会看到一封来自亚马逊的电子邮件。
以下是 Amazon SNS 为响应 CodeCommit仓库推送而发送的电子邮件的输出示例:
{ "Records":[ { "awsRegion":"us-east-2", "codecommit":{ "references" : [ { "commit":"
317f8570EXAMPLE
", "created":true, "ref":"refs/heads/NewBranch
" }, { "commit":"4c925148EXAMPLE
", "ref":"refs/heads/preprod
", } ] }, "eventId":"11111-EXAMPLE-ID
", "eventName":"ReferenceChange", "eventPartNumber":1, "eventSource":"aws:codecommit", "eventSourceARN":"arn:aws:codecommit:us-east-2:111122223333
:MyDemoRepo
", "eventTime":"2016-02-09T00:08:11.743+0000", "eventTotalParts":1, "eventTriggerConfigId":"0123456-I-AM-AN-EXAMPLE
", "eventTriggerName":"MyFirstTrigger
", "eventVersion":"1.0", "customData":"Project ID 12345", "userIdentityARN":"arn:aws:iam::111122223333
:user/JaneDoe-CodeCommit
", } ] }