

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

# 创建审批规则模板
<a name="how-to-create-template"></a>

您可以创建一个或多个审批规则模板，以帮助自定义跨存储库的开发工作流程。通过创建多个模板，您可以配置自动创建审批规则，以便不同分支拥有适当的审批和控制级别。例如，您可以为生产和开发分支创建不同模板，并将这些模板应用到一个或多个存储库。当用户在这些存储库中创建拉取请求时，将根据这些模板对请求进行评估。如果请求与所应用模板中的条件匹配，则会为该拉取请求创建审批规则。

您可以使用控制台或 Amazon CLI 创建批准规则模板。有关托管策略和审批规则模板权限的更多信息，请参阅[针对审批规则模板的操作所需的权限](auth-and-access-control-permissions-reference.md#aa-art)和[Amazon 的托管策略 CodeCommit](security-iam-awsmanpol.md)。

**Topics**
+ [创建审批规则模板（控制台）](#how-to-create-template-console)
+ [创建审批规则模板 (Amazon CLI)](#how-to-create-template-cli)

## 创建审批规则模板（控制台）
<a name="how-to-create-template-console"></a>

默认情况下，审批规则模板不与任何存储库关联。您可以在创建模板时，在模板与一个或多个存储库之间建立关联，也可以之后再添加关联。<a name="create-template-console"></a>

## 创建审批规则模板（控制台）
<a name="create-template-console"></a>

1. 在 [https://console.aws.amazon.com/codesuite/codemmit](https://console.amazonaws.cn/codesuite/codecommit/home) /home 打开 CodeCommit 控制台。

1. 选择 **Approval rule templates (审批规则模板)**，然后选择 **Create template (创建模板)**。

1. 在 **Approval rule template name (审批规则模板名称)** 中，为模板指定一个描述性名称，以便您知道其用途。例如，如果您希望拉取请求在合并之前，必须由一组高级开发人员中的一位对其进行审批，那么可以将该规则命名为 **Require 1 approver from a senior developer**。

1. （可选）在 **Description (描述)** 中，提供有关此模板用途的描述。这可以帮助其他人决定此模板是否适合其存储库。

1. 在 **Number of approvals needed (需要的审批数量)** 中，输入所需的数量。默认 为 1。

1. （可选）如果您希望必须由特定用户组对拉取请求进行审批，那么可以在 **Approval rule members (审批规则成员)** 中，选择 **Add (添加)**。在 **Approver type (审批人类型)** 中，选择以下选项之一：
   + **IAM 用户名或代入的角色**：此选项会预先填入您用于登录的账户的 Amazon Web Services 账户 ID，并且只需要一个名称。它可以用于 IAM 用户，以及名称与所提供名称相匹配的联合访问用户。这是一个非常强大的选项，提供了极大的灵活性。例如，如果您选择了此选项并使用 Amazon Web Services 账户 123456789012 登录，而且指定了 **Mary\_Major**，那么以下所有用户都将计为来自该用户的审批：
     + 账户中的 IAM 用户 (`arn:aws:iam::123456789012:user/Mary_Major`)
     + 在 IAM 中标识为 Mary\_Major 的联合用户 (`arn:aws:sts::123456789012:federated-user/Mary_Major`)

     除非包含通配符 (`*Mary_Major`)，否则此选项无法识别代入 **CodeCommitReview** 角色且角色会话名称为 Mary\_Major (`arn:aws:sts::123456789012:assumed-role/CodeCommitReview/Mary_Major`) 的某人的活动会话。您还可以显式指定角色名称 (`CodeCommitReview/Mary_Major`)。
   + **完全限定的 ARN**：此选项允许您指定 IAM 用户或角色的完全限定 Amazon 资源名称 (ARN)。此选项还支持其他 Amazon 服务（例如 Amazon Lambda 和）使用的代入角色 Amazon CodeBuild。对于代入的角色，ARN 格式应为 `arn:aws:sts::{{AccountID}}:assumed-role/{{RoleName}}`（适用于角色）和 `arn:aws:sts::{{AccountID}}:assumed-role/{{FunctionName}}`（适用于函数）。

   如果选择 **IAM 用户名或代入的角色**作为审批人类型，那么请在**值**中输入 IAM 用户或角色的名称，或者输入用户或角色的完全限定 ARN。再次选择 **Add (添加)** 可添加多个用户或角色，直到您已添加了其审批计入所需审批数量的所有用户或角色。

   这两种审批人类型都允许在其值中使用通配符 (\*)。例如，如果选择 **IAM 用户名或代入的角色**选项，并且指定 **CodeCommitReview/\***，那么代入 **CodeCommitReview** 角色的所有用户都将计入审批池中。他们各自的角色会话名称将计入所需的审批人数量。按照此方法，Mary\_Major 和 Li\_Juan 在登录并代入 `CodeCommitReview` 角色时，都计为审批。有关 IAM ARNs、通配符和格式的更多信息，请参阅 [IAM 标识符](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)。
**注意**  
审批规则不支持跨账户审批。

1. （可选）在 **Branch filters (分支筛选条件)** 中，输入要用于筛选审批规则创建的目标分支名称。例如，如果您指定{{main}}，则仅当拉取请求的目标分支是名为的分支时，才会为关联存储库中的拉取请求创建批准规则{{main}}。您可以在分支名称中使用通配符 (\*)，将审批规则应用于名称与通配符匹配的所有分支。不过，通配符不能用在分支名称的开头。最多可指定 100 个分支名称。如果未指定任何筛选条件，则模板将应用于关联存储库中的所有分支。

1. （可选）在**已关联的存储库**中，在**存储库**列表中，选择要与审批规则关联的此 Amazon Web Services 区域 中的存储库。
**注意**  
您可以选择在创建模板后关联存储库。有关更多信息，请参阅 [将审批规则模板与存储库关联](how-to-associate-template.md)。

1. 选择**创建**。

![与两个存储库关联的审批规则模板，如果在名为“main”的分支上创建了拉取请求，则需要已定义的审批规则中的 1 位审批人](http://docs.amazonaws.cn/codecommit/latest/userguide/images/codecommit-approval-rule-template.png)


## 创建审批规则模板 (Amazon CLI)
<a name="how-to-create-template-cli"></a>

您可以使用 Amazon CLI 来创建批准规则模板。使用时 Amazon CLI，您可以为模板指定目标引用，以便它仅适用于目标分支与模板中的分支匹配的拉取请求。<a name="create-template-cli"></a>

## 创建审批规则模板 (Amazon CLI)
<a name="create-template-cli"></a>

1. 在终端或命令行中，运行 **create-approval-rule-template** 命令，并指定：
   + 审批规则模板的名称。请考虑使用可描述其用途的名称。
   + 审批规则模板的描述。与名称一样，请考虑提供详细说明。
   + 审批规则模板的 JSON 结构。此结构可包括对目标引用的要求，即要对其应用审批规则的拉取请求的目标分支，以及审批池成员，即其审批将计入所需审批数量的用户。

   创建审批规则的内容时，可通过以下两种方式之一指定审批池中的审批人：
   + **CodeCommitApprovers**：此选项只需要一个亚马逊 Web Services 账户和资源。它可以用于 IAM 用户，以及名称与所提供资源名称相匹配的联合访问用户。这是一个非常强大的选项，提供了极大的灵活性。例如，如果指定 Amazon 账户 123456789012 和 **Mary\_Major**，那么以下所有用户都将计为来自该用户的审批：
     + 账户中的 IAM 用户 (`arn:aws:iam::123456789012:user/Mary_Major`)
     + 在 IAM 中标识为 Mary\_Major 的联合用户 (`arn:aws:sts::123456789012:federated-user/Mary_Major`)

     除非包含通配符 ()，否则此选项无法识别角色会话名称为 {{Mary\_Major}} (`arn:aws:sts::123456789012:assumed-role/{{SeniorDevelopers}}/{{Mary_Major}}`) 的某人的活动会话。{{SeniorDevelopers}} `*Mary_Major`
   + **完全限定的 ARN**：此选项允许您指定 IAM 用户或角色的完全限定 Amazon 资源名称 (ARN)。

   有关 IAM ARNs、通配符和格式的更多信息，请参阅 [IAM 标识符](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)。

   以下示例创建名为 **2-approver-rule-for-main** 的审批规则模板，且其描述为 **Requires two developers from the team to approve the pull request if the destination branch is main**。模板需要两个代入 **CodeCommitReview** 角色的用户，在任何拉取请求合并到 **main** 分支之前对其进行审批：

   ```
   aws codecommit create-approval-rule-template --approval-rule-template-name {{2-approver-rule-for-main}} --approval-rule-template-description "{{Requires two developers from the team to approve the pull request if the destination branch is main}}" --approval-rule-template-content "{\"Version\": \"2018-11-08\",\"DestinationReferences\": [\"refs/heads/main\"],\"Statements\": [{\"Type\": \"Approvers\",\"NumberOfApprovalsNeeded\": 2,\"ApprovalPoolMembers\": [\"arn:aws:sts::123456789012:assumed-role/CodeCommitReview/*\"]}]}"
   ```

1. 如果成功，该命令返回类似以下内容的输出：

   ```
   {
       "approvalRuleTemplate": {
           "approvalRuleTemplateName": "2-approver-rule-for-main",
           "creationDate": 1571356106.936,
           "approvalRuleTemplateId": "dd8b17fe-EXAMPLE",
           "approvalRuleTemplateContent": "{\"Version\": \"2018-11-08\",\"DestinationReferences\": [\"refs/heads/main\"],\"Statements\": [{\"Type\": \"Approvers\",\"NumberOfApprovalsNeeded\": 2,\"ApprovalPoolMembers\": [\"arn:aws:sts::123456789012:assumed-role/CodeCommitReview/*\"]}]}",
           "lastModifiedUser": "arn:aws:iam::123456789012:user/Mary_Major",
           "approvalRuleTemplateDescription": "Requires two developers from the team to approve the pull request if the destination branch is main",
           "lastModifiedDate": 1571356106.936,
           "ruleContentSha256": "4711b576EXAMPLE"
       }
   }
   ```