跨操作共享计算 - Amazon CodeCatalyst

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

跨操作共享计算

默认情况下,工作流程中的操作在队列中的不同实例上运行。这种行为为操作提供了对输入状态的隔离性和可预测性。默认行为需要进行显式配置,以便在操作之间共享上下文,例如文件和变量。

计算共享功能允许您在同一个实例上运行工作流程中的所有操作。使用计算共享可以缩短工作流程运行时间,因为配置实例所花费的时间更少。您也可以在操作之间共享文件(构件),而无需进行额外的工作流程配置。

当使用计算共享运行工作流程时,默认队列或指定队列中的实例将在该工作流中的所有操作持续时间内保留。工作流程运行完成后,实例预留即被释放。

在共享计算上运行多个操作

您可以在工作流程级别使用定义 YAML 中的Compute属性来指定操作的队列和计算共享属性。您也可以使用中的可视化编辑器配置计算属性 CodeCatalyst。要指定队列,请设置现有队列的名称,将计算类型设置为 EC2,然后开启计算共享。

注意

只有当计算类型设置为 EC2 时,才支持计算共享,而且 Windows Server 2022 操作系统不支持计算共享。有关计算队列、计算类型和属性的更多信息,请参阅为工作流程配置计算和运行时环境 Docker 镜像

注意

如果您使用的是免费套餐,并且在工作流程定义 YAML 中手动指定Linux.x86-64.XLargeLinux.x86-64.2XLarge队列,则该操作仍将在默认队列 (Linux.x86-64.Large) 上运行。有关计算可用性和定价的更多信息,请参阅分层选项表

开启计算共享后,将自动跨操作复制包含工作流程源的文件夹。您无需配置输出工件,也无需在整个工作流程定义(YAML 文件)中将其作为输入工件引用。作为工作流程作者,您需要使用输入和输出连接环境变量,就像不使用计算共享一样。如果要在工作流程源之外的操作之间共享文件夹,请考虑使用文件缓存。有关更多信息,请参阅 使用构件在工作流程中的操作之间共享数据在工作流程运行之间缓存文件

您的工作流程定义文件所在的源存储库由标签标识WorkflowSource。使用计算共享时,将在引用该工作流源的第一个操作中下载工作流源,并自动提供给工作流程运行中的后续操作使用。通过操作(例如添加、修改或删除文件)对包含工作流源的文件夹所做的任何更改也将在工作流程的后续操作中显示。您可以在任何工作流程操作中引用位于工作流源文件夹中的文件,就像在不使用计算共享的情况下一样。有关更多信息,请参阅 引用源存储库中的文件

注意

计算共享工作流程需要指定严格的操作顺序,因此无法设置并行操作。虽然可以在序列中的任何操作中配置输出工件,但不支持输入工件。

计算共享的注意事项

您可以使用计算共享功能运行工作流程,以加快工作流程运行并在使用相同实例的工作流程中的操作之间共享上下文。要确定使用计算共享是否适合您的场景,请考虑以下因素:

计算共享 没有计算共享

计算类型

Amazon EC2

亚马逊 EC2、AWS Lambda

实例配置

操作在同一实例上运行

操作在单独的实例上运行

操作系统

Amazon Linux 2

亚马逊 Linux 2、Windows Server 2022(仅限构建操作)

引用文件

$CATALYST_SOURCE_DIR_WorkflowSource, /sources/WorkflowSource/

$CATALYST_SOURCE_DIR_WorkflowSource, /sources/WorkflowSource/

Workflow 结构

操作只能按顺序运行

操作可以并行运行

跨工作流程操作访问数据

访问缓存的工作流程源 (WorkflowSource)

访问共享工件的输出(需要额外配置)

开启计算共享

按照以下说明为工作流程开启计算共享。

Visual
使用可视化编辑器开启计算共享
  1. 打开 CodeCatalyst 控制台,网址为 https://codecatalyst.aws/

  2. 选择您的项目。

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

  4. 选择工作流程的名称。

  5. 选择编辑

  6. 选择 “视觉”。

  7. 选择 “工作流属性”。

  8. 计算类型下拉菜单中选择 EC2

  9. (可选)从 “计算队列-可选” 下拉菜单中,选择要用于运行工作流程操作的队列。您可以选择按需队列,也可以创建并选择预配置的队列。有关更多信息,请参阅创建已配置的舰队为操作分配预配置的队列或按需计算

  10. 切换开关以开启计算共享,让工作流程中的操作在同一个队列上运行。

  11. (可选)选择工作流程的运行模式。有关更多信息,请参阅 配置运行的排队行为

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

YAML
使用 YAML 编辑器开启计算共享
  1. 打开 CodeCatalyst 控制台,网址为 https://codecatalyst.aws/

  2. 选择您的项目。

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

  4. 选择工作流程的名称。

  5. 选择编辑

  6. 选择 YAML。

  7. 开启计算共享,将SharedInstance字段设置为TRUE和设置TypeEC2。设置Fleet为要用于运行工作流程操作的计算队列。您可以选择按需队列,也可以创建并选择预配置的队列。有关更多信息,请参阅创建已配置的舰队为操作分配预配置的队列或按需计算

    在工作流程 YAML 中,添加类似于以下内容的代码:

    Name: MyWorkflow SchemaVersion: "1.0" Compute: # Define compute configuration. Type: EC2 Fleet: MyFleet # Optionally, choose an on-demand or provisioned fleet. SharedInstance: true # Turn on compute sharing. Default is False. Actions: BuildFirst: Identifier: aws/build@v1 Inputs: Sources: - WorkflowSource Configuration: Steps: - Run: ... ...
  8. (可选)选择 “验证” 以在提交之前验证工作流程的 YAML 代码。

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

示例

示例:亚马逊 S3 发布

以下工作流程示例展示了如何通过两种方式执行 Amazon S3 发布操作:首先使用输入项目,然后使用计算共享。使用计算共享,不需要输入工件,因为您可以访问缓存的WorkflowSource。此外,不再需要 “构建” 操作中的输出构件。S3 发布操作配置为使用显式DependsOn属性来维护连续操作;构建操作必须成功运行才能运行 S3 发布。

  • 如果没有计算共享,则需要使用输入构件并将输出与后续操作共享:

    Name: S3PublishUsingInputArtifact SchemaVersion: "1.0" Actions: Build: Identifier: aws/build@v1 Outputs: Artifacts: - Name: ArtifactToPublish Files: [output.zip] Inputs: Sources: - WorkflowSource Configuration: Steps: - Run: ./build.sh # Build script that generates output.zip PublishToS3: Identifier: aws/s3-publish@v1 Inputs: Artifacts: - ArtifactToPublish Environment: Connections: - Role: codecatalyst-deployment-role Name: dev-deployment-role Name: dev-connection Configuration: SourcePath: output.zip DestinationBucketName: dev-bucket
  • 通过设置SharedInstance为使用计算共享时TRUE,您可以对同一个实例运行多个操作并通过指定单个工作流程源来共享构件。输入工件不是必需的,也无法指定:

    Name: S3PublishUsingComputeSharing SchemaVersion: "1.0" Compute: Type: EC2 Fleet: dev-fleet SharedInstance: TRUE Actions: Build: Identifier: aws/build@v1 Inputs: Sources: - WorkflowSource Configuration: Steps: - Run: ./build.sh # Build script that generates output.zip PublishToS3: Identifier: aws/s3-publish@v1 DependsOn: - Build Environment: Connections: - Role: codecatalyst-deployment-role Name: dev-deployment-role Name: dev-connection Configuration: SourcePath: output.zip DestinationBucketName: dev-bucket