

亚马逊 CodeCatalyst 不再向新买家开放。现有客户可以继续正常使用该服务。有关更多信息，请参阅 [如何从中迁移 CodeCatalyst](migration.md)。

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

# 要求批准工作流运行
<a name="workflows-approval"></a>

您可以将工作流运行配置为需要先获得批准，然后才能继续。为此，您必须在工作流中添加**批准**[阶段门](workflows-gates.md)。*批准门禁*可阻止工作流程继续进行，直到一组用户或一组用户在 CodeCatalyst 控制台中提交一项或多项批准。在提供了所有的批准后，阶段门将“解锁”，允许恢复工作流运行。

在工作流中使用**批准**阶段门，可以让开发、运营和领导团队有机会先对更改进行审查，然后再面向更广泛的受众进行部署。

有关工作流运行的更多信息，请参阅[运行工作流](workflows-working-runs.md)。

**Topics**
+ [如何解锁批准阶段门？](#workflows-approval-conditions)
+ [何时使用“批准”阶段门](#workflows-approval-when)
+ [谁可以提供批准？](#workflows-approval-who)
+ [如何通知用户需要该用户的批准？](#workflows-approval-notify-methods)
+ [我能否使用“批准”阶段门来阻止工作流运行的启动？](#workflows-approval-prevent)
+ [对于排队、取代和并行运行模式，工作流批准如何运行？](#workflows-approval-run-mode)
+ [示例：“批准”阶段门](workflows-approval-example.md)
+ [添加“批准”阶段门](workflows-approval-add.md)
+ [配置批准通知](workflows-approval-notify.md)
+ [批准或拒绝工作流运行](workflows-approval-approve.md)
+ [“批准”阶段门 YAML](approval-ref.md)

## 如何解锁批准阶段门？
<a name="workflows-approval-conditions"></a>

要解锁**批准**阶段门，必须满足以下*所有*条件：
+ **条件 1**：必须提交所需数量的批准。所需的批准数量是可配置的，并且每个用户只允许提交一次批准。
+ **条件 2**：所有批准必须在阶段门超时之前提交。阶段门在激活 14 天后超时。此时间段不可配置。
+ **条件 3**：没有任何人拒绝工作流运行。一个拒绝就会导致工作流运行失败。
+ **条件 4**：（仅在使用取代运行模式时适用。） 该运行不得被以后的运行所取代。有关更多信息，请参阅 [对于排队、取代和并行运行模式，工作流批准如何运行？](#workflows-approval-run-mode)。

如果不满足任何条件，则 CodeCatalyst 停止工作流程并将运行状态设置为 “**失败**”（在**条件 1** 到 **3** 的情况下）或 “**已取代**”（在**条件 4** 的情况下）。

## 何时使用“批准”阶段门
<a name="workflows-approval-when"></a>

通常，在工作流将应用程序和其他资源部署到生产服务器或任何必须验证质量标准的环境中时，您可以在工作流中使用**批准**阶段门。通过在部署到生产环境之前放置阶段门，您向审阅者提供了机会，在新的软件修订版面向公众发布之前对其进行验证。

## 谁可以提供批准？
<a name="workflows-approval-who"></a>

任何用户，只要是您的项目的成员且具有**贡献者**或**项目管理员**角色，就可以提供批准。具有**空间管理员**角色且属于您的项目空间的用户也可以提供批准。

**注意**  
具有**审阅者**角色的用户无法提供批准。

## 如何通知用户需要该用户的批准？
<a name="workflows-approval-notify-methods"></a>

要通知用户需要该用户的批准，您必须：
+  CodeCatalyst 给他们发一条 Slack 通知。有关更多信息，请参阅 [配置批准通知](workflows-approval-notify.md)。
+ 转到 CodeCatalyst 控制台中 “**批准**” 和 “**拒绝**” 按钮所在的页面，然后将该页面的 URL 粘贴到发给批准者的电子邮件或消息应用程序中。有关如何导航到此页面的更多信息，请参阅[批准或拒绝工作流运行](workflows-approval-approve.md)。

## 我能否使用“批准”阶段门来阻止工作流运行的启动？
<a name="workflows-approval-prevent"></a>

可以，有资格要求。有关更多信息，请参阅[我能否使用阶段门来阻止工作流运行的启动？](workflows-gates.md#workflows-gates-prevent)。

## 对于排队、取代和并行运行模式，工作流批准如何运行？
<a name="workflows-approval-run-mode"></a>

在排队、取代或并行运行模式时，**批准**阶段门的工作方式与[操作](workflows-actions.md)类似。我们建议您阅读[关于排队运行模式](workflows-configure-runs.md#workflows-configure-runs-queued)、[关于取代运行模式](workflows-configure-runs.md#workflows-configure-runs-superseded)、[关于并行运行模式](workflows-configure-runs.md#workflows-configure-runs-parallel)部分以熟悉这些运行模式。在对这些模式有基本的了解后，请返回本节，了解当存在**批准**阶段门时，这些运行模式是如何工作的。

存在**批准**阶段门时，将按以下方式处理运行：
+ 如果您使用[排队运行模式](workflows-configure-runs.md#workflows-configure-runs-queued)，则运行将排队在当前正等待阶段门批准的运行之后。当该阶段门解锁（即所有批准都已给出）时，队列中的下一个运行将进入阶段门，等待批准。此过程继续，排队的运行将通过门 one-by-one进行处理。 [Figure 1](#figure-1-workflow-queued-run-mode-ma)说明了这个过程。
+ 如果您使用[取代运行模式](workflows-configure-runs.md#workflows-configure-runs-superseded)，则其行为与排队运行模式相同，不同之处在于较新的运行不会堆积在阶段门的队列中，而是取代（接管）较早的运行。这里没有队列，任何目前在阶段门等待批准的运行都将被取消并被更新的运行所取代。[Figure 2](#figure-2-workflow-superseded-run-mode-ma) 说明了这个过程。
+ 如果您使用[并行运行模式](workflows-configure-runs.md#workflows-configure-runs-parallel)，则运行将并行启动，不会形成队列。由于每个运行的前面都没有其他运行，因此阶段门会立即处理每个运行。[Figure 3](#figure-3-workflow-parallel-run-mode-ma) 说明了这个过程。

**图 1**：“排队运行模式”和**批准**阶段门

![\[“批准”阶段门如何与“排队运行模式”配合使用\]](http://docs.aws.amazon.com/zh_cn/codecatalyst/latest/userguide/images/flows/runmode-queued-ma.png)


**图 2**：“取代运行模式”和**批准**阶段门

![\[“批准”阶段门如何与“取代运行模式”配合使用\]](http://docs.aws.amazon.com/zh_cn/codecatalyst/latest/userguide/images/flows/runmode-superseded-ma.png)


**图 3**：“并行运行模式”和**批准**阶段门

![\[“批准”阶段门如何与“并行运行模式”配合使用\]](http://docs.aws.amazon.com/zh_cn/codecatalyst/latest/userguide/images/flows/runmode-parallel-ma.png)


# 示例：“批准”阶段门
<a name="workflows-approval-example"></a>

以下示例说明如何在名为 `Staging` 和 `Production` 的两个操作之间添加一个名为 `Approval_01` 的**批准**阶段门。`Staging` 操作首先运行，其次是 `Approval_01` 阶段门，最后是 `Production` 操作。只有在 `Approval_01` 阶段门解锁时才会执行 `Production` 操作。`DependsOn` 属性可确保 `Staging`、`Approval_01` 和 `Production` 阶段按顺序运行。

有关**批准**阶段门的更多信息，请参阅[要求批准工作流运行](workflows-approval.md)。

```
Actions:
  Staging: # Deploy to a staging server
    Identifier: aws/ecs-deploy@v1
    Configuration:
    ...       
  Approval_01:
    Identifier: aws/approval@v1
    DependsOn:
      - Staging
    Configuration:
      ApprovalsRequired: 2 
  Production: # Deploy to a production server
    Identifier: aws/ecs-deploy@v1
    DependsOn:
      - Approval_01
    Configuration:
    ...
```

# 添加“批准”阶段门
<a name="workflows-approval-add"></a>

要将工作流配置为需要批准，您必须在工作流中添加**批准**阶段门。按照以下说明向您的工作流添加**批准**阶段门。

有关此阶段门的更多信息，请参阅[要求批准工作流运行](workflows-approval.md)。

------
#### [ Visual ]<a name="workflows-add-trigger-add-console"></a>

**向工作流添加“批准”阶段门（可视化编辑器）**

1. 打开 CodeCatalyst 控制台，[网址为 https://codecatalyst.aws/](https://codecatalyst.aws/)。

1. 选择您的项目。

1. 在导航窗格中，选择 **CI/CD**，然后选择**工作流**。

1. 选择工作流的名称。您可以按定义工作流的源存储库或分支名称筛选，也可以按工作流名称或状态筛选。

1. 选择**编辑**。

1. 在左上角，选择**阶段门**。

1. 在**阶段门**目录的**批准**中，选择加号（**\$1**）。

1. 选择**输入**，然后在**依赖于**字段中执行以下操作。

   指定必须成功运行才能使该阶段门运行的操作、操作组或阶段门。默认情况下，当您向工作流添加阶段门时，阶段门的设置取决于工作流中的最后一个操作。如果删除此属性，则阶段门将不依赖于任何设置，并且将首先运行，然后再执行其他操作。
**注意**  
阶段门必须配置为在操作、操作组或阶段门之前或之后运行。阶段门无法设置为与其他操作、操作组和阶段门并行运行。

   有关**依赖于**功能的更多信息，请参阅 [按顺序执行阶段门和操作](workflows-gates-depends-on.md)。

1. 选择**配置**选项卡。

1. 在**阶段门名称**字段中，执行以下操作。

   指定要为阶段门指定的名称。在工作流中，所有阶段门名称都必须唯一。阶段门名称仅限字母数字字符（a-z、A-Z、0-9）、连字符（-）和下划线（\$1）。不允许使用空格。您不能使用引号在阶段门名称中启用特殊字符和空格。

1. （可选）在**批准数**字段中，执行以下操作。

   指定解锁**批准**阶段门所需的最小审批数。最小值为 `1`。最大值为 `2`。如果省略，则默认值为 `1`。
**注意**  
如果要省略 `ApprovalsRequired` 属性，请从工作流定义文件中删除该阶段门的 `Configuration` 部分。

1. （可选）选择**验证**，在提交之前验证工作流的 YAML 代码。

1. 选择**提交**，输入提交消息，然后再次选择**提交**。

------
#### [ YAML ]

**向工作流添加“批准”阶段门（YAML 编辑器）**

1. 打开 CodeCatalyst 控制台，[网址为 https://codecatalyst.aws/](https://codecatalyst.aws/)。

1. 选择您的项目。

1. 在导航窗格中，选择 **CI/CD**，然后选择**工作流**。

1. 选择工作流的名称。您可以按定义工作流的源存储库或分支名称筛选，也可以按工作流名称或状态筛选。

1. 选择**编辑**。

1. 选择 **YAML**。

1. 根据以下示例的指导，添加 `Approval` 部分和底层属性。有关更多信息，请参阅 [工作流 YAML 定义](workflow-reference.md) 中的 [“批准”阶段门 YAML](approval-ref.md)。

   ```
   Actions:
     MyApproval_01:
       Identifier: aws/approval@v1
       DependsOn:
         - PreviousAction
       Configuration:
         ApprovalsRequired: 2
   ```

   有关另一个示例，请参阅[示例：“批准”阶段门](workflows-approval-example.md)。

1. （可选）选择**验证**，在提交之前验证工作流的 YAML 代码。

1. 选择**提交**，输入提交消息，然后再次选择**提交**。

------

# 配置批准通知
<a name="workflows-approval-notify"></a>

您可以让 CodeCatalyst 向 Slack 频道发送通知，通知用户有工作流运行需要批准。用户看到通知并单击其中的链接。该链接将他们转到 CodeCatalyst 批准页面，他们可以在页面中批准或拒绝工作流。

您还可以配置通知来通知用户，工作流已获得批准、已被拒绝或批准请求已过期。

按照以下说明设置 Slack 通知。

**开始前的准备工作**  
确保已在工作流中添加了**批准**阶段门。有关更多信息，请参阅[添加“批准”阶段门](workflows-approval-add.md)。

**向 Slack 频道发送工作流批准通知**

1. 使用 Slack 配置 CodeCatalyst。有关更多信息，请参阅[开始使用 Slack 通知](getting-started-notifications.md)。

1. 在包含需要批准的工作流的 CodeCatalyst 项目中，如果尚未启用通知则启用。要启用通知，请执行以下操作：

   1. 导航到您的项目，然后在导航窗格中，选择**项目设置**。

   1. 在顶部，选择**通知**。

   1. 在**通知事件**中，选择**编辑通知**。

   1. 开启**待处理的工作流批准**，然后选择一个 CodeCatalyst 发送通知的 Slack 频道。

   1. （可选）开启其他通知，提醒用户有关已批准、已拒绝和已过期批准的情况。您可以启用**工作流运行已批准**、**工作流运行已拒绝**、**工作流批准已取代**和**工作流批准已超时**通知。在每条通知旁边，选择 CodeCatalyst 将发送通知的 Slack 频道。

   1. 选择**保存**。

# 批准或拒绝工作流运行
<a name="workflows-approval-approve"></a>

包含**批准**阶段门的工作流运行将需要得到批准或拒绝。用户可以通过以下方式提供批准或拒绝：
+ 控制 CodeCatalyst 台
+ 团队成员提供的链接
+ 自动发送的 Slack 通知

在用户提供了批准或拒绝后，此决定无法撤消。

**注意**  
只有某些用户可以批准或拒绝工作流运行。有关更多信息，请参阅[谁可以提供批准？](workflows-approval.md#workflows-approval-who)。

**开始前的准备工作**  
确保已在工作流中添加了**批准**阶段门。有关更多信息，请参阅 [添加“批准”阶段门](workflows-approval-add.md)。

**要批准或拒绝工作流程，请从 CodeCatalyst 控制台开始运行**

1. 打开 CodeCatalyst 控制台，[网址为 https://codecatalyst.aws/](https://codecatalyst.aws/)。

1. 选择您的项目。

1. 在导航窗格中，选择 **CI/CD**，然后选择**工作流**。

1. 选择工作流的名称。您可以按定义工作流的源存储库或分支名称筛选，也可以按工作流名称或状态筛选。

1. 在工作流图表中，选择代表**批准**阶段门的方框。

   侧面板显示。
**注意**  
此时，您可以根据需要将此页面的 URL 发送给其他审批者。

1. 在**审阅决定**下，选择**批准**或**拒绝**。

1. （可选）在**评论 – 可选**中，输入评论，说明您批准或拒绝工作流运行的原因。

1. 选择**提交**。

**从团队成员提供的链接批准或拒绝启动工作流运行**

1. 选择团队成员发送给您的链接。（您可以让团队成员阅读前面的步骤以获取链接。）

1. 如果询问 CodeCatalyst，请登录。

   您将被重定向到工作流运行批准页面。

1. 在**审阅决定**下，选择**批准**或**拒绝**。

1. （可选）在**评论 – 可选**中，输入评论，说明您批准或拒绝工作流运行的原因。

1. 选择**提交**。

**从自动化 Slack 通知批准或拒绝启动工作流运行**

1. 确保已设置 Slack 通知。请参阅[配置批准通知](workflows-approval-notify.md)。

1. 在 Slack 中，在发送批准通知的频道中，选择批准通知中的链接。

1. 如果询问 CodeCatalyst，请登录。

   您将被重定向到工作流运行页面。

1. 在工作流图表中，选择批准阶段门。

1. 在**审阅决定**下，选择**批准**或**拒绝**。

1. （可选）在**评论 – 可选**中，输入评论，说明您批准或拒绝工作流运行的原因。

1. 选择**提交**。

# “批准”阶段门 YAML
<a name="approval-ref"></a>

下面是**批准**阶段门的 YAML 定义。要了解如何使用此阶段门，请参阅[要求批准工作流运行](workflows-approval.md)。

此操作定义部分包含在更广泛的工作流定义文件中。有关此文件的更多信息，请参阅[工作流 YAML 定义](workflow-reference.md)。

**注意**  
接下来的大多数 YAML 属性在可视化编辑器中都有对应的 UI 元素。要查找 UI 元素，请使用 **Ctrl\$1F**。该元素将与其关联的 YAML 属性一起列出。

```
# The workflow definition starts here.
# See 顶级属性 for details.
        
Name: MyWorkflow
SchemaVersion: 1.0 
Actions:
 
# The 'Approval' gate definition starts here.    
  Approval: 
    Identifier: aws/approval@v1
    DependsOn:
      - another-action
    Configuration:
      ApprovalsRequired: number
```

## Approval
<a name="approval.name"></a>

（必需）

指定要为阶段门指定的名称。在工作流中，所有阶段门名称都必须唯一。阶段门名称仅限字母数字字符（a-z、A-Z、0-9）、连字符（-）和下划线（\$1）。不允许使用空格。您不能使用引号在阶段门名称中启用特殊字符和空格。

默认值：`Approval_nn`。

对应的 UI：“配置”选项卡/**阶段门名称**

## Identifier
<a name="approval.identifier"></a>

(*Approval*/**Identifier**)

（必需）

标识阶段门。**批准**阶段门支持版本 `1.0.0`。除非您希望缩短版本，否则不要更改此属性。有关更多信息，请参阅 [指定要使用的操作版本](workflows-action-versions.md)。

默认值：`aws/approval@v1`。

对应的 UI：工作流图表/Approval\$1nn/**aws/approval@v1** 标签

## DependsOn
<a name="approval.dependson"></a>

(*Approval*/**DependsOn**)

（可选）

指定必须成功运行才能使该阶段门运行的操作、操作组或阶段门。默认情况下，当您向工作流添加阶段门时，阶段门的设置取决于工作流中的最后一个操作。如果删除此属性，则阶段门将不依赖于任何设置，并且将首先运行，然后再执行其他操作。

**注意**  
阶段门必须配置为在操作、操作组或阶段门之前或之后运行。阶段门无法设置为与其他操作、操作组和阶段门并行运行。

有关**依赖于**功能的更多信息，请参阅 [按顺序执行阶段门和操作](workflows-gates-depends-on.md)。

对应的 UI：“输入”选项卡/**依赖于**

## Configuration
<a name="approval.configuration"></a>

(*Approval*/**Configuration**)

（可选）

可在其中定义阶段门的配置属性的部分。

对应的 UI：**配置**选项卡

## ApprovalsRequired
<a name="approval.approvals.required"></a>

(*Approval*/Configuration/**ApprovalsRequired**)

（可选）

指定解锁**批准**阶段门所需的最小审批数。最小值为 `1`。最大值为 `2`。如果省略，则默认值为 `1`。

**注意**  
如果要省略 `ApprovalsRequired` 属性，请从工作流定义文件中删除该阶段门的 `Configuration` 部分。

对应的 UI：“配置”选项卡/**批准数量**