配置运行的排队行为 - Amazon CodeCatalyst

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

配置运行的排队行为

默认情况下 CodeCatalyst,在 Amazon 中,当多个工作流程同时运行时,会将它们排成 CodeCatalyst 队列,然后按启动顺序逐一处理。您可以通过指定运行模式来更改此默认行为。有几种运行模式:

  • (默认)排队运行模式- CodeCatalyst 进程一个接一个地运行

  • 被取代的运行模式 — CodeCatalyst 进程一个接一个地运行,较新的运行将取代较旧的运行

  • 并行运行模式 — CodeCatalyst 进程并行运行

有关工作流程运行的更多信息,请参阅运行工作流

关于排队运行模式

排队运行模式下,运行是串行进行的,等待的运行形成队列。

队列位于操作和操作组的入口处,因此您可以在同一个工作流程中拥有多个队列(请参阅Figure 1)。当排队的跑步进入操作时,该操作将被锁定,其他跑步都无法进入。当运行完成并退出操作时,该操作将解锁并准备好进行下一次运行。

Figure 1说明了在排队运行模式下配置的工作流程。它显示了:

  • Seven 在工作流程中顺其自然。

  • 两个队列:一个在输入源 (repo: Main) 的条目之外,另一个在操作的条目之外。BuildTestActionGroup

  • 两个锁定的方块:输入源 (repo: Main) 和。BuildTestActionGroup

以下是工作流程运行完成处理后会发生的情况:

  • run-4d444 完成源存储库的克隆后,它将退出输入源并加入 run-3c333 之后的队列。然后,run-5e555 将进入输入源。

  • run-1a111 完成构建和测试后,它将退出BuildTestActionGroup操作并进入动作。DeployAction然后,run-2b222 将进入操作BuildTestActionGroup

图 1:在 “排队运行模式” 下配置的工作流程

在 “排队运行模式” 下配置的工作流程

在以下情况下使用排队运行模式:

  • 您希望在功能和运行之间保持 one-to-one 关系——使用取代模式时,可能会对这些功能进行分组。例如,当您在提交 1 中合并功能 1 时,运行 1 会启动;当您在提交 2 中合并功能 2 时,运行 2 将启动,依此类推。如果您要使用取代模式而不是队列模式,则您的功能(和提交)将在运行中组合在一起,取代其他功能(和提交)。

  • 您希望避免使用并行模式时可能出现的竞争条件和意外问题。例如,如果两个软件开发人员 Wang 和 Saanvi 在大致相同的时间启动工作流程以部署到 Amazon ECS 集群,那么 Wang 的运行可能会开始在集群上进行集成测试,而 Saanvi 的运行会向集群部署新的应用程序代码,从而导致 Wang 的测试失败或测试错误的代码。再举一个例子,你的目标可能没有锁定机制,在这种情况下,两次运行可能会以意想不到的方式覆盖彼此的更改。

  • 您想限制 CodeCatalyst 用于处理运行的计算资源的负载。例如,如果您的工作流程中有三个操作,则最多可以同时运行三个操作。对一次可以运行的次数施加限制可以使运行吞吐量更具可预测性。

  • 您想限制工作流程向第三方服务发出的请求数量。例如,您的工作流程可能有一个生成操作,其中包括从 Docker Hub 提取映像的说明。Docker Hub 将每个账户每小时可以发出的拉取请求数量限制为一定数量,如果你超过限制,你将被封锁。使用排队运行模式降低运行吞吐量将减少每小时向 Docker Hub 发出的请求,从而限制锁定以及由此导致的构建和运行失败的可能性。

最大队列大小:50

有关最大队列大小的注意事项:

  • 最大队列大小是指工作流中允许在所有队列中运行的最大次数。

  • 如果队列的运行时间超过 50 次,则 CodeCatalyst 丢弃第 51 次及随后的运行。

失败行为

如果某项运行在操作处理时变得无响应,则其后面的运行将暂停在队列中,直到操作超时。一小时后操作超时。

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

关于被取代的运行模式

被取代的运行模式排队运行模式相同,不同之处在于:

  • 如果排队的跑步赶上队列中的另一场运行,则后一次运行将取代(接管)先前的运行,而较早的运行将被取消并标记为 “已取代”。

  • 作为第一个 bullet 中描述的行为的结果,当使用取代的运行模式时,队列只能包含一次运行。

以中的工作流程Figure 1为指导,将取代的运行模式应用于此工作流程将导致以下结果:

  • run-7g777 将取代队列中的其他两次运行,并且将是 Queue #1 中唯一剩下的运行。run-6f666 和 run-5e555 将被取消。

  • run-3c333 将取代 run -2b222,成为队列 #2 中唯一剩下的跑步run-2b222 将被取消

如果需要,请使用已取代的运行模式:

  • 吞吐量比排队模式更好

  • 与排队模式相比,向第三方服务发出的请求更少;如果第三方服务有速率限制(例如 Docker Hub),这将非常有利

关于并行运行模式

并行运行模式下,运行相互独立,无需等待其他运行完成后再开始。没有队列,运行吞吐量仅受工作流程内部操作完成速度的限制。

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

重要

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

最大并行运行次数:每个 CodeCatalyst空间 1000

配置运行模式

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

将运行模式从排队或取代更改为 parallel 时,会 CodeCatalyst 取消排队的运行,并允许当前由操作处理的运行在取消之前完成。

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

Visual
使用可视化编辑器更改运行模式
  1. 打开 CodeCatalyst 控制台,网址为 https://codecatalyst.aws/

  2. 选择您的项目。

  3. 在导航窗格中,选择 C I/CD,然后选择工作流程。

  4. 选择工作流程的名称。您可以按定义工作流程的源存储库或分支名称进行筛选,也可以按工作流程名称或状态进行筛选。

  5. 选择编辑

  6. 在右上角,选择工作流程属性

  7. 展开 “高级”,在 “运行” 模式下,选择以下选项之一:

    1. 已排队 — 请参阅 关于排队运行模式

    2. 已@@ 取代 — 请参阅 关于被取代的运行模式

    3. 平行 — 见 关于并行运行模式

  8. (可选)选择 “验证” 以在提交之前验证工作流程的YAML代码。

  9. 选择 “提交”,输入提交消息,然后再次选择 “提交”。

YAML
使用YAML编辑器更改运行模式
  1. 打开 CodeCatalyst 控制台,网址为 https://codecatalyst.aws/

  2. 选择您的项目。

  3. 在导航窗格中,选择 C I/CD,然后选择工作流程。

  4. 选择工作流程的名称。您可以按定义工作流程的源存储库或分支名称进行筛选,也可以按工作流程名称或状态进行筛选。

  5. 选择编辑

  6. 选择YAML

  7. 添加RunMode属性,如下所示:

    Name: Workflow_6d39 SchemaVersion: "1.0" RunMode: QUEUED|SUPERSEDED|PARALLEL

    有关更多信息,请参阅 “” 一顶级属性节中对RunMode属性的描述工作流程YAML定义

  8. (可选)选择 “验证” 以在提交之前验证工作流程的YAML代码。

  9. 选择 “提交”,输入提交消息,然后再次选择 “提交”。