示例:创建 AAmazon SNS 主题的AWS CodeCommit触发器 - AWS CodeCommit

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

示例:创建 AAmazon SNS 主题的AWS CodeCommit触发器

您可以为存储库创建触发器,以便该 CodeCommit 存储库中的事件触发来自Amazon Simple Notification Service (Amazon SNS) 主题的通知。您可能需要创建 Amazon SNS 主题的触发器,使用户能够订阅有关存储库事件(例如删除分支)的通知。您还可以利用 Amazon SNS 主题与其他服务的集成,例如Amazon Simple Queue Service (Amazon SQS) 和AWS Lambda.

注意
  • 您必须将触发器指向现有的 Amazon SNS 主题,即为响应存储库事件而采取的操作。有关创建和订阅 Amazon SNS 主题的更多信息,请参阅开始使用 Amazon Simple Notification Service

  • CodeCommit 触发器不支持 Amazon SNS FIFO(先进先出)主题。

为 CodeCommit存储库创建 Amazon SNS 主题的触发器(控制台)

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

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

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

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

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

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

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

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

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

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

      注意

      CodeCommit 触发器不支持 Amazon SNS FIFO(先进先出)主题。您必须选择类型设置为标准的 Amazon SNS 主题。如果您想使用 Amazon SNS FIFO 主题,则必须为将 SNS FIFO 主题配置为目标 CodeCommit 的事件配置 Amazon Eventbridge 规则。

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

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

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

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

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

创建 Amazon SNS 主题的触发器

  1. 打开纯文本编辑器,创建一个 JSON 文件,在其中指定:

    • Amazon SNS 主题名称。

      注意

      CodeCommit 触发器不支持 Amazon SNS FIFO(先进先出)主题。您必须选择类型设置为标准的 Amazon SNS 主题。如果您想使用 Amazon SNS FIFO 主题,则必须为将 SNS FIFO 主题配置为目标 CodeCommit 的事件配置 Amazon Eventbridge 规则。

    • 要用该触发器监控的存储库和分支。(如果没有指定任何分支,触发器将应用到存储库中的所有分支。)

    • 激活该触发器的事件。

    保存该文件。

    例如,要为名为的存储库创建触发器 MyDemoRepo,该存储库将所有存储库事件发布到名为 MysnStopic 的 Amazon SN S 主题,即 ma inpreprod

    { "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 主题的订阅者发送通知。例如,以下内容用于测试名为 t rigger.json 的触发器文件中的 JSON 是否有效,是否 CodeCommit 可以发布到 Amazon SNS 主题:

    aws codecommit test-repository-triggers --cli-input-json file://trigger.json

    如果成功,该命令返回类似以下内容的信息:

    { "successfulExecutions": [ "MyFirstTrigger" ], "failedExecutions": [] }
  3. 在终端或命令提示符中,运行 put-repository-triggers 命令在 CodeCommit 中创建触发器。例如,要使用名为 trigger.json 的 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 的电子邮件。

    以下是 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", } ] }