为 CodeDeploy 事件创建触发器 - Amazon CodeDeploy
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

为 CodeDeploy 事件创建触发器

您可以创建一个为Amazon CodeDeploy部署或实例事件的 Amazon Simple Notification Service (Amazon SNS) 主题。然后,当该事件发生时,关联主题的所有订阅者都会通过主题中指定的终端节点(例如 SMS 消息或电子邮件)接收通知。Amazon SNS 提供多种订阅主题的方法。

在创建触发器之前,必须设置触发器指向的 Amazon SNS 主题。有关信息,请参阅创建主题。创建主题时,我们建议您使用Topic-group-us-west-3-deploy-fail或等格式为其命名,以标识其用途Topic-group-project-2-instance-stop

在为您的触发器发送通知之前,您还必须向 CodeDeploy 服务角色授予 Amazon SNS 权限。有关信息,请参阅向 CodeDeploy 服务角色授予 Amazon SNS 权限

创建主题后,您可以添加订阅者。有关创建、管理和订阅主题的信息,请参阅什么是亚马逊简单通知服务

创建触发器以发送 CodeDeploy 事件通知(控制台)

您可以使用 CodeDeploy 控制台为 CodeDeploy 事件创建触发器。在设置过程结束时,将发送一条测试通知消息,以确保权限和触发器详细信息均已正确设置。

为 CodeDeploy 事件创建触发器
  1. 在 Amazon Web Services Management Console中,打开 Amazon CodeDeploy 控制台。

  2. 登录Amazon Web Services Management Console并打开 CodeDeploy 主机,网址为 https://console.aws.amazon.com/codedeploy

    注意

    使用您设置的同一用户登录CodeDeploy 入门

  3. 在导航窗格中,展开 “部署”,然后选择 “应用程序”。

  4. Applications (应用程序) 页面上,选择与您要在其中添加触发器的部署组关联的应用程序的名称。

  5. Application details (应用程序) 页面上,选择您要在其中添加触发器的部署组。

  6. 选择 Edit(编辑)。

  7. 展开 Advanced - optional (高级 - 可选)

  8. Triggers (触发器) 区域中,选择 Create trigger (创建触发器)

  9. Create deployment trigger (创建部署触发器) 窗格中,执行以下操作:

    1. 触发器名称中,输入触发器的名称以便于标识其用途。我们建议采用 Trigger-group-us-west-3-deploy-failTrigger-group-eu-central-instance-stop 这样的格式。

    2. 事件中,选择一个或多个事件类型以触发 Amazon SNS 主题发送通知。

    3. Amazon SNS 主题中,选择您为发送此触发器的通知而创建的主题名称。

    4. 选择 “创建触发器”。 CodeDeploy 发送测试通知,确认您已正确配置与 Amazon SNS 主题 CodeDeploy 之间的访问权限。如果您已订阅该主题,您会收到通过 SMS 消息或电子邮件发送的确认信息,具体取决于您为该主题选择的终端结点类型。

  10. 选择 Save changes(保存更改)。

创建触发器以发送 CodeDeploy 事件通知 (CLI)

您可以在创建部署组时使用 CLI 来加入触发器,也可以将触发器添加到现有部署组。

创建触发器以发送关于新部署组的通知

创建 JSON 文件来配置部署组,然后使用--cli-input-json选项运行create-deployment-group命令。

创建 JSON 文件最简单的方式是使用 --generate-cli-skeleton 选项获取 JSON 格式的副本,然后在纯文本编辑器中提供所需的值。

  1. 运行以下命令,然后将结果复制到纯文本编辑器中。

    aws deploy create-deployment-group --generate-cli-skeleton
  2. 将现有 CodeDeploy 应用程序的名称添加到输出中:

    { "applicationName": "TestApp-us-east-2", "deploymentGroupName": "", "deploymentConfigName": "", "ec2TagFilters": [ { "Key": "", "Value": "", "Type": "" } ], "onPremisesInstanceTagFilters": [ { "Key": "", "Value": "", "Type": "" } ], "autoScalingGroups": [ "" ], "serviceRoleArn": "", "triggerConfigurations": [ { "triggerName": "", "triggerTargetArn": "", "triggerEvents": [ "" ] } ] }
  3. 为您要配置的参数提供值。

    使用create-deployment-group命令时,必须至少为以下参数提供值:

    • applicationName:已在您的账户中创建的应用程序的名称。

    • deploymentGroupName:您正在创建的部署组的名称。

    • serviceRoleArn:在您的账户 CodeDeploy 中设置的现有服务角色的 ARN。有关信息,请参阅步骤 2:为创建服务角色 CodeDeploy

    triggerConfigurations 部分,为以下参数提供值:

    • triggerName:您要为触发器给定的便于标识的名称。我们建议采用 Trigger-group-us-west-3-deploy-failTrigger-group-eu-central-instance-stop 这样的格式。

    • triggerTargetArn:您创建的与触发器关联的 Amazon SNS 主题的 ARN,格式如下:arn:aws:sns:us-east-2:444455556666:NewTestTopic

    • triggerEvents:您要为其触发通知的事件的类型。您可以指定一个或多个事件类型,多个事件类型名称用逗号分隔(例如,"triggerEvents":["DeploymentSuccess","DeploymentFailure","InstanceFailure"])。当您添加多个事件类型时,所有这些类型的通知都将发送到您指定的主题,而不是分别发送到不同的主题。您可以从以下事件类型中选择:

      • DeploymentStart

      • DeploymentSuccess

      • DeploymentFailure

      • DeploymentStop

      • DeploymentRollback

      • DeploymentReady (仅适用于蓝部署中的替换实例)

      • InstanceStart

      • InstanceSuccess

      • InstanceFailure

      • InstanceReady (仅适用于蓝部署中的替换实例)

    以下配置示例将为一个名为 TestApp-us-east-2 的应用程序创建一个名为 dep-group-ghi-789-2 的部署组,并创建一个触发器,在部署启动、成功或失败时,该触发器都提示发送通知:

    { "applicationName": "TestApp-us-east-2", "deploymentConfigName": "CodeDeployDefault.OneAtATime", "deploymentGroupName": "dep-group-ghi-789-2", "ec2TagFilters": [ { "Key": "Name", "Value": "Project-ABC", "Type": "KEY_AND_VALUE" } ], "serviceRoleArn": "arn:aws:iam::444455556666:role/AnyCompany-service-role", "triggerConfigurations": [ { "triggerName": "Trigger-group-us-east-2", "triggerTargetArn": "arn:aws:sns:us-east-2:444455556666:us-east-deployments", "triggerEvents": [ "DeploymentStart", "DeploymentSuccess", "DeploymentFailure" ] } ] }
  4. 以 JSON 文件格式保存更新,然后在运行 create-deployment-group 命令时使用 --cli-input-json 选项调用该文件:

    重要

    务必在文件名前包含 file://。此命令中需要该项。

    aws deploy create-deployment-group --cli-input-json file://filename.json

    在创建过程结束时,您会收到一条测试通知消息,指示权限和触发器详细信息均已正确设置。

创建触发器以发送关于现有部署组的通知

要使用Amazon CLI向现有部署组添加 CodeDeploy 事件触发器,请创建一个 JSON 文件来更新部署组,然后使用--cli-input-json选项运行update-deployment-group命令。

创建 JSON 文件最简单的方式是运行 get-deployment-group 命令以获取部署组配置的副本(采用 JSON 格式),然后在纯文本编辑器中更新参数值。

  1. 运行以下命令,然后将结果复制到纯文本编辑器中。

    aws deploy get-deployment-group --application-name application --deployment-group-name deployment-group
  2. 从输出中删除以下内容:

    • 在输出的开头处,删除 { "deploymentGroupInfo":

    • 在输出的结尾处,删除 }

    • 删除包含 deploymentGroupId 的行。

    • 删除包含 deploymentGroupName 的行。

    现在,您的文本文件的内容看起来应类似于以下内容:

    { "applicationName": "TestApp-us-east-2", "deploymentConfigName": "CodeDeployDefault.OneAtATime", "autoScalingGroups": [], "ec2TagFilters": [ { "Type": "KEY_AND_VALUE", "Value": "Project-ABC", "Key": "Name" } ], "triggerConfigurations": [], "serviceRoleArn": "arn:aws:iam::444455556666:role/AnyCompany-service-role", "onPremisesInstanceTagFilters": [] }
  3. triggerConfigurations 部分,为 triggerEventstriggerTargetArntriggerName 参数添加数据。有关触发器配置参数的信息,请参见TriggerConfig

    现在,您的文本文件的内容看起来应类似于以下内容。在部署启动、成功或失败时,此代码都会提示发送通知。

    { "applicationName": "TestApp-us-east-2", "deploymentConfigName": "CodeDeployDefault.OneAtATime", "autoScalingGroups": [], "ec2TagFilters": [ { "Type": "KEY_AND_VALUE", "Value": "Project-ABC", "Key": "Name" } ], "triggerConfigurations": [ { "triggerEvents": [ "DeploymentStart", "DeploymentSuccess", "DeploymentFailure" ], "triggerTargetArn": "arn:aws:sns:us-east-2:444455556666:us-east-deployments", "triggerName": "Trigger-group-us-east-2" } ], "serviceRoleArn": "arn:aws:iam::444455556666:role/AnyCompany-service-role", "onPremisesInstanceTagFilters": [] }
  4. 将更新另存为 JSON 文件,然后使用--cli-input-json选项运行update-deployment-group命令。请务必包含 --current-deployment-group-name 选项并将 filename 替换为您的 JSON 文件的名称:

    重要

    务必在文件名前包含 file://。此命令中需要该项。

    aws deploy update-deployment-group --current-deployment-group-name deployment-group-name --cli-input-json file://filename.json

    在创建过程结束时,您会收到一条测试通知消息,指示权限和触发器详细信息均已正确设置。