

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

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

# 配置运行的排队行为
<a name="workflows-configure-runs"></a>

默认情况下，在 Amazon CodeCatalyst 中，当多个工作流运行同时进行时，CodeCatalyst 会将它们排队，并按照其启动顺序逐一处理。您可以通过指定*运行模式*来更改此默认行为。运行模式分为几种：
+ （默认）排队运行模式 – CodeCatalyst 进程逐个运行
+ 取代运行模式 – CodeCatalyst 进程逐个运行，较新的运行将取代较旧的运行
+ 并行运行模式 – CodeCatalyst 进程并行运行

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

**Topics**
+ [关于排队运行模式](#workflows-configure-runs-queued)
+ [关于取代运行模式](#workflows-configure-runs-superseded)
+ [关于并行运行模式](#workflows-configure-runs-parallel)
+ [配置运行模式](#workflows-configure-runs-configure)

## 关于排队运行模式
<a name="workflows-configure-runs-queued"></a>

在*排队运行模式*下，运行是串行进行的，处于等待中的运行形成队列。

队列在操作和操作组的入口处形成，因此*在同一个工作流中可以有多个队列*（请参阅[Figure 1](#figure-1-workflow-queued-run-mode)）。当排队的运行进入某个操作时，该操作将被锁定，其他运行都无法进入。当运行完成并退出操作时，该操作将解锁并准备好进行下一次运行。

[Figure 1](#figure-1-workflow-queued-run-mode) 说明了配置为排队运行模式的工作流。它显示了：
+ 有七个运行在通过工作流。
+ 两个队列：一个在输入源（**Repo:main**）的入口之外，另一个在 **BuildTestActionGroup** 操作的入口之外。
+ 两个锁定的块：输入源（**Repo:main**）和 **BuildTestActionGroup**。

以下是工作流运行的处理完成后会发生的情况：
+ 当 **Run-4d444** 完成源存储库的克隆后，它将退出输入源并加入队列，位于 **Run-3c333** 之后。然后，**Run-5e555** 将进入输入源。
+ 当 **Run-1a111** 完成构建和测试后，它将退出 **BuildTestActionGroup** 操作并进入 **DeployAction** 操作。然后，**Run-2b222** 将进入 **BuildTestActionGroup** 操作。

**图 1**：配置为“排队运行模式”的工作流

![配置为“排队运行模式”的工作流](http://docs.aws.amazon.com/zh_cn/codecatalyst/latest/userguide/images/flows/RunMode-Queued.png)


在以下情况下使用排队运行模式：
+ **您希望在功能和运行之间保持一对一的关系，在使用取代模式时，这些功能可能会被分组**。例如，当您在提交 1 中合并功能 1 时，运行 1 会启动；当您在提交 2 中合并功能 2 时，运行 2 会启动，依此类推。如果您使用取代模式而不是排队模式，则您的功能（和提交）将一起分组到运行中，并会取代其他运行。
+ **您需要避免使用并行模式时可能出现的争用情况和意外问题**。例如，如果有两位软件开发人员 Wang 和 Saanvi，他们在大致相同的时间启动工作流运行以部署到 Amazon ECS 集群，那么 Wang 的运行可能会在集群上启动集成测试，而 Saanvi 的运行会向集群部署新的应用程序代码，从而导致 Wang 的测试失败或测试了错误的代码。再举一个例子，您的目标可能没有锁定机制，在这种情况下，两次运行可能会以意想不到的方式覆盖彼此的更改。
+ **您想限制 CodeCatalyst 用于处理运行的计算资源上的负载**。例如，如果工作流中有三个操作，则您最多可能会同时进行三个运行。通过对一次可以进行的运行数施加限制，可以使运行吞吐量更具可预测性。
+ **您想限制工作流向第三方服务发出的请求数量**。例如，您的工作流可能有一个构建操作，其中包括从 Docker Hub 提取映像的说明。[Docker Hub 对每个账户每小时可以发出的拉取请求数量](https://www.docker.com/increase-rate-limits)有一定的限制，在超过限制时会被阻止。使用排队运行模式可降低运行吞吐量，这样就可以减少每小时向 Docker Hub 发出的请求数，从而避免可能出现的锁定情况以及导致的构建和运行失败。

**最大队列大小**：50

有关**最大队列大小**的注意事项：
+ 最大队列大小是指在工作流的*所有队列*中，允许的运行的最大数量。
+ 如果队列中的运行超过 50 个，则 CodeCatalyst 会丢弃第 51 个及随后的运行。

**失败行为**：

如果某个运行在操作处理时变得没有响应，则其后面的运行将暂停在队列中，直到操作超时。操作在 1 小时后超时。

如果运行在操作内部失败，则允许排队在其后面的第一个运行继续进行。

## 关于取代运行模式
<a name="workflows-configure-runs-superseded"></a>

*取代运行模式*与*排队运行模式*大致相同，不同之处在于：
+ 如果排队的运行赶上了队列中的另一个运行，则后一个运行将取代（接管）先前的运行，而先前的运行将被取消并标记为“取代”。
+ 作为第一个要点中描述的行为的结果，使用取代运行模式时，队列只能包含一个运行。

以[Figure 1](#figure-1-workflow-queued-run-mode) 中的工作流为指南，对此工作流应用取代运行模式将导致以下结果：
+ **Run-7g777** 将取代队列中的另外两个运行，并且将是 **Queue \#1** 中唯一剩下的运行。**Run-6f666** 和 **Run-5e555** 将被取消。
+ **Run-3c333** 将取代 **Run-2b222**，成为 **Queue \#2** 中唯一剩下的运行。**Run-2b222** 将被取消。

在有以下需求时，请使用取代运行模式：
+ 比排队模式更好的吞吐量
+ 相比排队模式向第三方服务发出更少的请求；如果第三方服务有速率限制（例如 Docker Hub），这将非常有利

## 关于并行运行模式
<a name="workflows-configure-runs-parallel"></a>

在*并行运行模式*中，运行是相互独立的，不会等待其他运行完成后才开始。其中没有队列，运行吞吐量仅受工作流内部的操作完成速度的限制。

在开发环境中使用并行运行模式，每个用户都有自己的功能分支，并部署到不与其他用户共享的目标。

**重要**  
如果您有多个用户可以部署到的共享目标，例如生产环境中的 Lambda 函数，请不要使用并行模式，因为可能会导致争用情况。当并行工作流运行尝试同时更改共享资源时，就会出现*争用情况*，导致不可预测的结果。

**最大并行运行数量**：每个 CodeCatalyst 空间 1000 个

## 配置运行模式
<a name="workflows-configure-runs-configure"></a>

您可以将运行设置为排队、取代或并行模式。默认使用排队模式。

当您将运行从排队或取代模式更改为并行模式时，CodeCatalyst 会取消排队中的运行，并使当前由操作处理的运行能够完成，而不是取消。

当您将运行从并行模式更改为排队或取代模式时，CodeCatalyst 会让所有当前正在进行的并行运行完成。将运行更改为排队或取代模式后开始的任何运行都使用新模式。

------
#### [ Visual ]

**使用可视化编辑器更改运行模式**

1. 通过访问 [https://codecatalyst.aws/](https://codecatalyst.aws/) 打开 CodeCatalyst 控制台。

1. 选择您的项目。

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

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

1. 选择**编辑**。

1. 在右上角，选择**工作流属性**。

1. 展开**高级**，在**运行模式**下，选择以下选项之一：

   1. **排队** – 请参阅[关于排队运行模式](#workflows-configure-runs-queued)

   1. **取代** – 请参阅[关于取代运行模式](#workflows-configure-runs-superseded)

   1. **并行** – 请参阅[关于并行运行模式](#workflows-configure-runs-parallel)

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

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

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

**使用 YAML 编辑器更改运行模式**

1. 通过访问 [https://codecatalyst.aws/](https://codecatalyst.aws/) 打开 CodeCatalyst 控制台。

1. 选择您的项目。

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

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

1. 选择**编辑**。

1. 选择 **YAML**。

1. 添加 `RunMode` 属性，如下所示：

   ```
   Name: Workflow_6d39
   SchemaVersion: "1.0"
   RunMode: {{QUEUED|SUPERSEDED|PARALLEL}}
   ```

   有关更多信息，请参阅[工作流 YAML 定义](workflow-reference.md)的[顶级属性](workflow-reference.md#workflow.top.level)部分中对 `RunMode` 属性的说明。

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

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

------