示例:为 Amazon SNS 主题创建 AWS CodeCommit 触发器 - AWS CodeCommit

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 主题的触发器

  1. https://console.aws.amazon.com/codesuite/codemmit /home 打开 CodeCommit 控制台。

  2. 存储库 中,选择要创建存储库事件触发器的存储库。

  3. 在存储库的导航窗格中,选择设置,然后选择触发器

  4. 选择创建触发器,然后执行以下操作:

    • 触发器名称中,输入触发器的名称(例如MyFirstTrigger)。

    • 事件中,选择触发 Amazon SNS 主题发送通知的存储库事件。

      如果选择 All repository events,则无法选择任何其他事件。要选择事件的子集,请删除 All repository events,然后从列表中选择一个或多个事件。例如,如果希望触发器只在用户在 CodeCommit 存储库中创建分支或标签时运行,请删除所有存储库事件,然后选择创建分支或标记

    • 如果希望触发器应用于存储库的所有分支,请在分支中,将选定内容保留为空,因为此默认选项会自动将触发器应用于所有分支。如果您希望此触发器仅应用于特定分支,请从存储库分支列表中选择最多 10 个分支名称。

    • “选择要使用的服务” 中,选择 Amazon SNS

    • Amazon 中SNS,从列表中选择一个主题名称或ARN为该主题输入。

      注意

      CodeCommit 触发器不支持 Amazon SNSFIFO(先入先出)主题。您必须选择类型设置为 “标准” 的 Amazon SNS 主题。

    • 自定义数据中,提供您希望包含在 Amazon SNS 主题发送的通知中的任何可选信息(例如,开发者在此存储库中讨论开发时使用的IRC频道名称)。该字段是一个字符串。它不能用于传递任何动态参数。

  5. (可选)选择测试触发器。此步骤可帮助您确认是否正确配置了与 Amazon SNS 主题 CodeCommit 之间的访问权限。它使用 Amazon SNS 主题使用您存储库中的数据(如果有)发送测试通知。如果没有真实数据可用,测试通知将包含示例数据。

  6. 选择创建触发器以完成触发器的创建操作。

为 CodeCommit 存储库创建 Amazon SNS 主题的触发器 (AWS CLI)

您还可以使用命令行为 Amazon SNS 主题创建触发器,以响应 CodeCommit 存储库事件,例如有人向您的存储库推送提交时。

为 Amazon SNS 主题创建触发器
  1. 打开纯文本编辑器并创建一个指定以下内容的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返回的字符串中。

  2. (可选)在终端或命令提示符处,运行 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": [] }
  3. 在终端或命令提示符中,运行 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" }
  4. 要查看触发器的配置,请运行 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" } ] }
  5. 要测试触发器本身的功能,请生成并向配置该触发器的存储库推送一个提交。您应该会看到来自 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", } ] }