AWS CodeCommit
用户指南 (API 版本 2015-04-13)

示例:为 Amazon 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 主题触发器(控制台)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

为 Amazon SNS 主题创建触发器

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

    • Amazon SNS 主题名称。

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

    • 激活该触发器的事件。

    保存文件。

    例如,要为名为 MyDemoRepo 的存储库创建触发器,以便将 masterpreprod 这两个分支的所有存储库事件发布到名为 MySNSTopic 的 Amazon SNS 主题,请运行以下代码:

    { "repositoryName": "MyDemoRepo", "triggers": [ { "name": "MyFirstTrigger", "destinationArn": "arn:aws:sns:us-east-2:80398EXAMPLE:MySNSTopic", "customData": "", "branches": [ "master", "preprod" ], "events": [ "all" ] } ] }

    存储库中的每个触发器在该 JSON 文件中都有一个对应的触发块。要为存储库创建多个触发器,请在 JSON 文件中包含多个触发块。请记住,在该文件中创建的所有触发器都用于指定的存储库。不能在一个 JSON 文件中为多个存储库创建触发器。例如,如果要为某个存储库创建两个触发器,您可以创建一个包含两个触发块的 JSON 文件。在下面的示例中,没有为第二个触发器指定任何分支,因此,该触发器将应用到所有分支:

    { "repositoryName": "MyDemoRepo", "triggers": [ { "name": "MyFirstTrigger", "destinationArn": "arn:aws:sns:us-east-2:80398EXAMPLE:MySNSTopic", "customData": "", "branches": [ "master", "preprod" ], "events": [ "all" ] }, { "name": "MySecondTrigger", "destinationArn": "arn:aws:sns:us-east-2:80398EXAMPLE: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 主题的订阅者发送通知。例如,以下内容用于测试名为 trigger.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:80398EXAMPLE:MySNSTopic", "branches": [ "master", "preprod" ], "name": "MyFirstTrigger", "customData": "Project ID 12345" } ] }
  5. 要测试触发器本身的功能,请生成并向配置该触发器的存储库推送一个提交。您应会看到来自 Amazon SNS 主题的响应。例如,如果您将 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:80398EXAMPLE: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::80398EXAMPLE:user/JaneDoe-CodeCommit", } ] }