

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

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

# 配置计算和运行时映像
<a name="workflows-working-compute"></a>

在 CodeCatalyst 工作流程中，您可以指定用于运行工作流程操作的 CodeCatalyst 计算和运行时环境映像。

*计算*是指为运行工作流操作而管理和维护的计算引擎（CPU、内存和操作系统）。 CodeCatalyst 

**注意**  
如果计算被定义为工作流的属性，则不能将其定义为该工作流中任何操作的属性。同样，如果计算被定义为任何操作的属性，则无法将其定义为工作流中的属性。

*运行时环境镜像*是一个 Docker 容器，在其中 CodeCatalyst运行工作流程操作。Docker 容器在您选择的计算平台上运行，包括操作系统和工作流程操作可能需要的额外工具，例如 AWS CLI、Node.js 和.tar。

**Topics**
+ [计算类型](#compute.types)
+ [计算实例集](#compute.fleets)
+ [按需实例集属性](#compute.on-demand)
+ [预置实例集属性](#compute.provisioned-fleets)
+ [创建预置的实例集](projects-create-compute-resource.md)
+ [编辑预置的实例集](edit-compute-resource.md)
+ [删除预置的实例集](delete-compute-resource.md)
+ [向操作分配实例集或计算](workflows-assign-compute-resource.md)
+ [跨操作共享计算](compute-sharing.md)
+ [指定运行时环境映像](build-images.md)

## 计算类型
<a name="compute.types"></a>

CodeCatalyst 提供以下计算类型：
+ Amazon EC2
+ AWS Lambda

Amazon EC2 在操作运行期间提供更好的灵活性，而 Lambda 则提供优化的操作启动速度。由于启动延迟较短，Lambda 支持更快的工作流操作运行。Lambda 可以运行基本工作流，这些工作流可以构建、测试和部署具有常见运行时系统的无服务器应用程序。这些运行时包括 Node.js、Python、Java、.NET 和 Go。但是，Lambda 不支持某些用例，如果这会对您造成影响，请使用 EC2 计算类型：
+ Lambda 不支持来自指定注册表的运行时环境映像。
+ Lambda 不支持需要 root 权限的工具。对于 `yum` 或 `rpm` 之类的工具，请使用 Amazon EC2 计算类型或其他不需要 root 权限的工具。
+ Lambda 不支持 Docker 构建或运行。不支持以下使用 Docker 镜像的操作：部署 AWS CloudFormation 堆栈、部署到 Amazon ECS、Amazon S3 发布、 AWS CDK 引导、 AWS CDK 部署、 AWS Lambda 调用和 GitHub 操作。Lambda GitHub 计算也不支持在 “ CodeCatalyst GitHub 操作” 操作中运行的基于 Docker 的操作。您可以使用不需要 root 权限的替代方案，例如 Podman。
+ Lambda 不支持写入到 `/tmp` 外部的文件。配置工作流操作时，您可以重新配置工具来安装或写入到 `/tmp`。如果您的构件操作要安装 `npm`，请务必将其配置为安装到 `/tmp`。
+ Lambda 不支持超过 15 分钟的运行时。

## 计算实例集
<a name="compute.fleets"></a>

CodeCatalyst 提供以下计算队列：
+ 按需车队
+ 预置实例集

对于按需实例集，当工作流操作启动时，工作流会预置所需的资源。操作完成后，计算机就会被销毁。您只需为运行操作的分钟数付费。按需实例集是完全托管式的，并包括自动扩展功能以应对需求激增。

CodeCatalyst 还提供预配置的队列，其中包含由 Amazon EC2 提供支持并由维护的机器。 CodeCatalyst使用预置的实例集，您可以配置一组专用计算机来运行工作流操作。这些计算机保持空闲状态，可随时开始立即处理操作。使用预置实例集，您的计算机将始终处于运行状态，并且只要预置完毕，它们就会产生成本。

要创建、更新或删除实例集，您必须拥有**空间管理员**角色或**项目管理员**角色。

## 按需实例集属性
<a name="compute.on-demand"></a>

CodeCatalyst 提供以下按需队列：

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/codecatalyst/latest/userguide/workflows-working-compute.html)

**注意**  
按需实例集的规格将根据您的计费等级而有所不同。有关更多信息，请参阅[定价](https://codecatalyst.aws/explore/pricing)。

如果未选择任何舰队，则 CodeCatalyst 使用`Linux.x86-64.Large`。

## 预置实例集属性
<a name="compute.provisioned-fleets"></a>

预置实例集包含以下属性：

**操作系统**  
操作系统 以下操作系统可用：  
+ Amazon Linux 2
+ Windows Server 2022
**注意**  
只有在构建操作中才支持 Windows 实例集。其他操作目前不支持 Windows。

**架构**  
处理器架构。以下架构可用：  
+ x86\$164
+ Arm64

**计算机类型**  
每个实例的计算机类型。以下计算机类型可用：      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/codecatalyst/latest/userguide/workflows-working-compute.html)

**Capacity**  
分配给实例集的计算机的初始数量，它定义了可以并行运行的操作数量。

**扩展模式**  
定义操作数量超过实例集容量时的行为。    
**按需预置额外容量**  
按需设置其它计算机，这些计算机根据正在运行的新操作自动纵向扩展，然后在操作完成时缩减到基本容量。这可能会产生额外的成本，因为您需要为每台运行的计算机按分钟付费。  
**等到有额外的实例集容量可用**  
操作运行将放在队列中，直到有计算机可用。这限制了额外成本，因为没有分配额外的计算机。

# 创建预置的实例集
<a name="projects-create-compute-resource"></a>

按照以下说明操作来创建预置的实例集。

**注意**  
预置的实例集将在处于不活动状态 2 周后被停用。如果重新使用这些实例集，它们将自动重新激活，但这种重新激活可能会导致延迟。

**创建预置的实例集**

1. 在导航窗格中，选择 **CI/CD**，然后选择**计算**。

1. 选择**创建预置实例集**。

1. 在**预置机群名称**文本字段中，输入实例集的名称。

1. 从**操作系统**下拉菜单中，选择操作系统。

1. 从**计算机类型**下拉菜单中，选择您的计算机的计算机类型。

1. 在**容量**文本字段中，输入实例集中的最大机器数。

1. 从**扩展模式**下拉菜单中，选择所需的溢出行为。有关这些字段的更多信息，请参阅[预置实例集属性](workflows-working-compute.md#compute.provisioned-fleets)。

1. 选择**创建**。

创建预置实例集后，便可将其分配给操作。有关更多信息，请参阅 [向操作分配实例集或计算](workflows-assign-compute-resource.md)。

# 编辑预置的实例集
<a name="edit-compute-resource"></a>

按照以下说明操作来编辑预置的实例集。

**注意**  
预置的实例集将在处于不活动状态 2 周后被停用。如果重新使用这些实例集，它们将自动重新激活，但这种重新激活可能会导致延迟。

**编辑预置的实例集**

1. 在导航窗格中，选择 **CI/CD**，然后选择**计算**。

1. 在**预置实例集**列表中，选择要编辑的实例集。

1. 选择**编辑**。

1. 在**容量**文本字段中，输入实例集中的最大机器数。

1. 从**扩展模式**下拉菜单中，选择所需的溢出行为。有关这些字段的更多信息，请参阅[预置实例集属性](workflows-working-compute.md#compute.provisioned-fleets)。

1. 选择**保存**。

# 删除预置的实例集
<a name="delete-compute-resource"></a>

按照以下说明操作来删除预置的实例集。

**删除预置的实例集**
**警告**  
在删除某个预置的实例集之前，请从操作的 YAML 代码中删除 `Fleet` 属性，以从所有操作中移除该实例集。任何在删除预置实例集后继续引用该实例集的操作都将在下次运行时失败。

1. 在导航窗格中，选择 **CI/CD**，然后选择**计算**。

1. 在**预置实例集**列表中，选择要删除的实例集。

1. 选择**删除**。

1. 输入 **delete** 以确认删除。

1. 选择**删除**。

# 向操作分配实例集或计算
<a name="workflows-assign-compute-resource"></a>

默认情况下，工作流操作使用具有 Amazon EC2 计算类型的 `Linux.x86-64.Large` 按需实例集。要改为使用预置的实例集，或者使用其他按需实例集（例如 `Linux.x86-64.2XLarge`），请按照以下说明操作。

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

**开始前的准备工作**
+ 如果您要分配预置实例集，则必须先创建预置实例集。有关更多信息，请参阅[创建预置的实例集](projects-create-compute-resource.md)。

**向操作分配预置实例集或其他实例集类型**

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

1. 选择您的项目。

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

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

1. 选择**编辑**。

1. 选择**可视化**。

1. 在工作流图表中，选择要向其分配预置实例集或新实例集类型的操作。

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

1. 在**计算实例集**中，执行以下操作：

   指定将运行您的工作流或工作流操作的计算机或实例集。对于按需实例集，当操作开始时，工作流会预置操作所需的资源，操作完成后计算机就会被销毁。按需实例集的示例：`Linux.x86-64.Large`、`Linux.x86-64.XLarge`。有关按需实例集的更多信息，请参阅[按需实例集属性](workflows-working-compute.md#compute.on-demand)。

   使用预置的实例集，您可以配置一组专用计算机来运行工作流操作。这些计算机保持空闲状态，可随时开始立即处理操作。有关预置实例集的更多信息，请参阅[预置实例集属性](workflows-working-compute.md#compute.provisioned-fleets)。

   如果省略 `Fleet`，则默认值为 `Linux.x86-64.Large`。

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

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

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

**开始前的准备工作**
+ 如果您要分配预置实例集，则必须先创建预置实例集。有关更多信息，请参阅[创建预置的实例集](projects-create-compute-resource.md)。

**向操作分配预置实例集或其他实例集类型**

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

1. 选择您的项目。

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

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

1. 选择**编辑**。

1. 选择 **YAML**。

1. 找到您要向其分配预置实例集或新实例集类型的操作。

1. 在操作中，添加一个 `Compute` 属性并将 `Fleet` 设置为您的实例集名称或按需实例集类型。有关更多信息，请参阅[构建和测试操作 YAML](build-action-ref.md) 中相应操作 `Fleet` 属性的说明。

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

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

------

# 跨操作共享计算
<a name="compute-sharing"></a>

默认情况下，工作流中的操作在[实例集](workflows-working-compute.md#compute.fleets)中的不同实例上运行。这种行为为操作提供了隔离性以及输入状态的可预测性。默认行为需要明确配置，以便在操作之间共享上下文，例如文件和变量。

计算共享是一种功能，让您能够在同一个实例上运行工作流中的所有操作。使用计算共享可以缩短工作流运行时间，因为预置实例所花费的时间更少。您也可以在操作之间共享文件（构件），而无需执行额外的工作流配置。

使用计算共享运行工作流时，默认实例集或指定实例集中的实例将在该工作流中的所有操作持续时间内予以预留。工作流运行完成后，就会释放实例预留。

**Topics**
+ [在共享计算上运行多个操作](#how-to-compute-share)
+ [计算共享注意事项](#compare-compute-sharing)
+ [启用计算共享](#compute-sharing-steps)
+ [示例](#compute-sharing-examples)

## 在共享计算上运行多个操作
<a name="how-to-compute-share"></a>

您可以在工作流级别，使用定义 YAML 中的 `Compute` 属性来指定操作的实例集和计算共享属性。您还可以使用 CodeCatalyst 中的可视化编辑器配置计算属性。要指定实例集，请设置现有实例集的名称，将计算类型设置为 **EC2**，然后启用计算共享。

**注意**  
只有当计算类型设置为 **EC2** 时，才支持计算共享，并且 Windows Server 2022 操作系统不支持计算共享。有关计算实例集、计算类型和属性的更多信息，请参阅[配置计算和运行时映像](workflows-working-compute.md)。

**注意**  
如果您使用的是免费套餐，并且在工作流定义 YAML 中手动指定 `Linux.x86-64.XLarge` 或 `Linux.x86-64.2XLarge` 实例集，则该操作仍将在默认实例集（`Linux.x86-64.Large`）上运行。有关计算可用性和定价的更多信息，请参阅[套餐选项表](https://codecatalyst.aws/explore/pricing)。

在启用计算共享后，将自动跨操作复制包含工作流源的文件夹。您不需要配置输出构件，也无需在整个工作流定义（YAML 文件）中将它们作为输入工件引用。作为工作流的作者，您需要使用输入和输出连接环境变量，与未使用计算共享时一样。如果要在工作流源之外的操作之间共享文件夹，请考虑使用文件缓存。有关更多信息，请参阅[在操作之间共享构件和文件](workflows-working-artifacts.md)和[在工作流运行之间缓存文件](workflows-caching.md)。

您的工作流定义文件所在的源存储库由标签 `WorkflowSource` 来标识。使用计算共享时，将在引用该工作流源的第一个操作中下载工作流源，并自动提供给工作流运行中的后续操作使用。如果某个操作（例如添加、修改或删除文件）对包含工作流源的文件夹执行任何更改，这些更改也将在工作流的后续操作中可见。您可以在任何工作流操作中引用工作流源文件夹中的文件，与未使用计算共享时一样。有关更多信息，请参阅 [引用源存储库文件](workflows-sources-reference-files.md)。

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

## 计算共享注意事项
<a name="compare-compute-sharing"></a>

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


|   | 计算共享 | 不使用计算共享 | 
| --- | --- | --- | 
|  计算类型  |  Amazon EC2  |  Amazon EC2、AWS Lambda  | 
|  实例预置  |  操作在同一实例上运行  |  操作在单独的实例上运行  | 
|  操作系统  |  Amazon Linux 2  |  Amazon Linux 2、Windows Server 2022（仅限构建操作）  | 
|  引用文件  |  `$CATALYST_SOURCE_DIR_WorkflowSource`, `/sources/WorkflowSource/`  |  `$CATALYST_SOURCE_DIR_WorkflowSource`, `/sources/WorkflowSource/`  | 
|  工作流结构  |  操作只能按顺序运行  |  操作可以并行运行  | 
|  跨工作流操作访问数据  |  访问缓存的工作流来源（`WorkflowSource`）  |  访问共享构件的输出（需要额外配置）  | 

## 启用计算共享
<a name="compute-sharing-steps"></a>

请按照以下说明，为工作流启用计算共享。

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

**使用可视化编辑器启用计算共享**

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

1. 选择您的项目。

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

1. 选择工作流的名称。

1. 选择**编辑**。

1. 选择**可视化**。

1. 选择**工作流属性**。

1. 从**计算类型**下拉菜单中，选择 **EC2**。

1. （可选）从**计算实例集 – 可选**下拉菜单中，选择要用于运行工作流操作的实例集。您可以选择按需实例集，也可以创建并选择预置实例集。有关更多信息，请参阅 [创建预置的实例集](projects-create-compute-resource.md) 和 [向操作分配实例集或计算](workflows-assign-compute-resource.md) 

1. 切换开关以启用计算共享，让工作流中的操作在同一个实例集上运行。

1. （可选）选择工作流的运行模式。有关更多信息，请参阅 [配置运行的排队行为](workflows-configure-runs.md)。

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

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

**使用 YAML 编辑器启用计算共享**

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

1. 选择您的项目。

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

1. 选择工作流的名称。

1. 选择**编辑**。

1. 选择 **YAML**。

1. 将 `SharedInstance` 字段设置为 `TRUE` 并将 `Type` 设置为 `EC2`，从而启用计算共享。将 `Fleet` 设置为要用于运行工作流操作的计算实例集。您可以选择按需实例集，也可以创建并选择预置实例集。有关更多信息，请参阅 [创建预置的实例集](projects-create-compute-resource.md) 和 [向操作分配实例集或计算](workflows-assign-compute-resource.md)

   在工作流 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: ...
             ...
   ```

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

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

------

## 示例
<a name="compute-sharing-examples"></a>

**Topics**
+ [示例：Amazon S3 发布](#compute-share-s3)

### 示例：Amazon S3 发布
<a name="compute-share-s3"></a>

以下工作流示例说明了如何通过两种方式执行 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: amzn-s3-demo-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: amzn-s3-demo-bucket
  ```

# 指定运行时环境映像
<a name="build-images"></a>

*运行时环境镜像*是一个 Docker 容器，在其中 CodeCatalyst运行工作流程操作。Docker 容器在您选择的计算平台上运行，包括操作系统和工作流程操作可能需要的额外工具，例如 AWS CLI、Node.js 和.tar。

默认情况下，工作流程操作将在由提供和维护的其中一个[活动图像](#build-curated-images)上运行 CodeCatalyst。仅构建操作和测试操作支持自定义映像。有关更多信息，请参阅 [为操作分配自定义运行时环境 Docker 映像](#build-images-specify)。

**Topics**
+ [活动映像](#build-curated-images)
+ [如果活动映像未包括我需要的工具，该怎么办？](#build-images-more-tools)
+ [为操作分配自定义运行时环境 Docker 映像](#build-images-specify)
+ [示例](#workflows-working-custom-image-ex)

## 活动映像
<a name="build-curated-images"></a>

*活动镜像*是运行时环境镜像，完全支持 CodeCatalyst 并包含预安装的工具。目前有两组活动映像：一组于 2024 年 3 月发布，另一组于 2022 年 11 月发布。

操作是使用 2024 年 3 月版还是 2022 年 11 月版映像取决于：
+ 在 2024 年 3 月 26 日当天或之后添加到工作流中的构建操作和测试操作将在其 YAML 定义中包含一个 `Container` 部分，用于明确指定 [2024 年 3 月版映像](#build.default-image)。您可以选择移除 `Container` 部分以恢复到 [2022 年 11 月版映像](#build.previous-image)。
+ 在 2024 年 3 月 26 日之前添加到工作流中的构建操作和测试操作将*不会*在其 YAML 定义中包含 `Container` 部分，因此将使用 [2022 年 11 月版映像](#build.previous-image)。您可以保留 2022 年 11 月版映像，也可以升级该映像。要升级映像，请在可视化编辑器中打开操作，选择**配置**选项卡，然后从**运行时环境 Docker 映像**下拉列表中选择 2024 年 3 月版映像。此选择将在操作的 YAML 定义中添加 `Container` 部分，而该部分中将填入相应的 2024 年 3 月版映像。
+ 其他所有操作将使用 [2022 年 11 月版映像](#build.previous-image)或 [2024 年 3 月版映像](#build.default-image)。有关更多信息，请参阅操作的文档。

**Topics**
+ [2024 年 3 月版映像](#build.default-image)
+ [2022 年 11 月版映像](#build.previous-image)

### 2024 年 3 月版映像
<a name="build.default-image"></a>

2024 年 3 月的图片是提供的最新图片。 CodeCatalyst每个计算 type/fleet 组合有一张 2024 年 3 月的图像。

下表显示在每个 2024 年 3 月版映像上安装的工具。


**2024 年 3 月版映像工具**  

| 工具 | CodeCatalyst 适用于 Linux 的亚马逊 EC2 x86\$164-`CodeCatalystLinux_x86_64:2024_03` | CodeCatalyst 适用于 Linux 的 Lambda x86\$164-`CodeCatalystLinuxLambda_x86_64:2024_03` | CodeCatalyst 适用于 Linux 的亚马逊 EC2 Arm64-`CodeCatalystLinux_Arm64:2024_03` | CodeCatalyst 适用于 Linux 的 Lambda Arm64-`CodeCatalystLinuxLambda_Arm64:2024_03` | 
| --- | --- | --- | --- | --- | 
| AWS CLI | 2.15.17 | 2.15.17 | 2.15.17 | 2.15.17 | 
| AWS Copilot CLI | 1.32.1 | 1.32.1 | 1.32.1 | 1.32.1 | 
| Docker | 24.0.9 | 不适用 | 24.0.9 | 不适用 | 
| Docker Compose | 2.23.3 | 不适用 | 2.23.3 | 不适用 | 
| Git | 2.43.0 | 2.43.0 | 2.43.0 | 2.43.0 | 
| Go | 1.21.5 | 1.21.5 | 1.21.5 | 1.21.5 | 
| Gradle | 8.5 | 8.5 | 8.5 | 8.5 | 
| Java | Corretto17 | Corretto17 | Corretto17 | Corretto17 | 
| Maven | 3.9.6 | 3.9.6 | 3.9.6 | 3.9.6 | 
| Node.js | 18.19.0 | 18.19.0 | 18.19.0 | 18.19.0 | 
| npm | 10.2.3 | 10.2.3 | 10.2.3 | 10.2.3 | 
| Python | 3.9.18 | 3.9.18 | 3.9.18 | 3.9.18 | 
| Python3 | 3.11.6 | 3.11.6 | 3.11.6 | 3.11.6 | 
| pip | 22.3.1 | 22.3.1 | 22.3.1 | 22.3.1 | 
| .NET | 8.0.100 | 8.0.100 | 8.0.100 | 8.0.100 | 

### 2022 年 11 月版映像
<a name="build.previous-image"></a>

每个计算 type/fleet 组合都有一个 2022 年 11 月的图像。如果您配置了[预置实例集](workflows-working-compute.md#compute.fleets)，则还可将 2022 年 11 月版 Windows 映像用于构建操作。

下表显示在每个 2022 年 11 月版映像上安装的工具。


**2022 年 11 月版映像工具**  

| 工具 | CodeCatalyst 适用于 Linux 的亚马逊 EC2 x86\$164-`CodeCatalystLinux_x86_64:2022_11` | CodeCatalyst 适用于 Linux 的 Lambda x86\$164-`CodeCatalystLinuxLambda_x86_64:2022_11` | CodeCatalyst 适用于 Linux 的亚马逊 EC2 Arm64-`CodeCatalystLinux_Arm64:2022_11` | CodeCatalyst 适用于 Linux 的 Lambda Arm64-`CodeCatalystLinuxLambda_Arm64:2022_11` | CodeCatalyst 适用于 Windows 的亚马逊 EC2 x86\$164-`CodeCatalystWindows_x86_64:2022_11` | 
| --- | --- | --- | --- | --- | --- | 
| AWS CLI | 2.15.17 | 2.15.17 | 2.15.17 | 2.15.17 | 2.13.19 | 
| AWS Copilot CLI | 0.6.0 | 0.6.0 | 不适用 | 不适用 | 1.30.1 | 
| Docker | 23.01 | 不适用 | 23.0.1 | 不适用 | 不适用 | 
| Docker Compose | 2.16.0 | 不适用 | 2.16.0 | 不适用 | 不适用 | 
| Git | 2.40.0 | 2.40.0 | 2.39.2 | 2.39.2 | 2.42.0 | 
| Go | 1.20.2 | 1.20.2 | 1.20.1 | 1.20.1 | 1.19 | 
| Gradle | 8.0.2 | 8.0.2 | 8.0.1 | 8.0.1 | 8.3 | 
| Java | Corretto17 | Corretto17 | Corretto17 | Corretto17 | Corretto17 | 
| Maven | 3.9.4 | 3.9.4 | 3.9.0 | 3.9.0 | 3.9.4 | 
| Node.js | 16.20.2 | 16.20.2 | 16.19.1 | 16.14.2 | 16.20.0 | 
| npm | 8.19.4 | 8.19.4 | 8.19.3 | 8.5.0 | 8.19.4 | 
| Python | 3.9.15 | 2.7.18 | 3.11.2 | 2.7.18 | 3.9.13 | 
| Python3 | 不适用 | 3.9.15 | 不适用 | 3.11.2 | 不适用 | 
| pip | 22.2 | 22.2 | 23.0.1 | 23.0.1 | 22.0.4 | 
| .NET | 6.0.407 | 6.0.407 | 6.0.406 | 6.0.406 | 6.0.414 | 

## 如果活动映像未包括我需要的工具，该怎么办？
<a name="build-images-more-tools"></a>

如果提供的[活动图像](#build-curated-images)均不 CodeCatalyst 包含您需要的工具，则有以下几种选择：
+ 您可以提供包含必要工具的自定义运行时环境 Docker 映像。有关更多信息，请参阅 [为操作分配自定义运行时环境 Docker 映像](#build-images-specify)。
**注意**  
 如果要提供自定义运行时环境 Docker 映像，请确保您的自定义映像中安装了 Git。
+ 您可以让工作流的构建操作或测试操作安装所需的工具。

  例如，您可以在构建操作或测试操作的 YAML 代码的 `Steps` 部分中包含以下指令：

  ```
  Configuration:
    Steps:
      - Run: ./setup-script
  ```

  然后，该*setup-script*指令将运行以下脚本来安装 Node 包管理器 (npm)：

  ```
  #!/usr/bin/env bash
  echo "Setting up environment"
  
  touch ~/.bashrc
  curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
  source ~/.bashrc 
  nvm install v16.1.0
  source ~/.bashrc
  ```

  有关构建操作 YAML 的更多信息，请参阅[构建和测试操作 YAML](build-action-ref.md)。

## 为操作分配自定义运行时环境 Docker 映像
<a name="build-images-specify"></a>

如果您不想使用提供的 A [ctive 镜像](#build-curated-images) CodeCatalyst，则可以提供自定义运行时环境 Docker 镜像。如果要提供自定义映像，请确保其中安装了 Git。映像可以存放在 Docker Hub、Amazon Elastic Container Registry 或任何公共存储库中。

要了解如何创建自定义 Docker 映像，请参阅 Docker 文档中的 [Containerize an application](https://docs.docker.com/get-started/02_our_app/)。

按照以下说明操作，将您的自定义运行时环境 Docker 映像分配给操作。指定映像后，在操作开始时将其 CodeCatalyst 部署到您的计算平台。

**注意**  
**以下操作不支持自定义运行时环境 Docker 镜像：**部署 CloudFormation 堆栈**、**部署到 ECS** 和**GitHub 操作**。自定义运行时环境 Docker 镜像也不支持 Lambda 计算类型。**

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

**使用可视化编辑器分配自定义运行时环境 Docker 映像**

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

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

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

1. 选择**编辑**。

1. 选择**可视化**。

1. 在工作流图中，选择将使用您的自定义运行时环境 Docker 映像的操作。

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

1. 在底部附近，请填写以下字段。

   **运行时环境 Docker 映像 – 可选**

   指定存储映像的注册表。有效值包括：
   + `CODECATALYST`（YAML 编辑器）

     图像存储在 CodeCatalyst 注册表中。
   + **Docker Hub**（可视化编辑器）或 `DockerHub`（YAML 编辑器）

     映像存储在 Docker Hub 映像注册表中。
   + **其他注册表**（可视化编辑器）或 `Other`（YAML 编辑器）

     映像存储在自定义映像注册表中。可以使用任何公开可用的注册表。
   + **Amazon Elastic Container Registry**（可视化编辑器）或 `ECR`（YAML 编辑器）

     映像存储在 Amazon Elastic Container Registry 映像存储库中。要使用 Amazon ECR 存储库中的映像，此操作需要对 Amazon ECR 的访问权限。要启用此访问权限，您必须创建包含以下权限和自定义信任策略的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。（如果需要，可以修改现有角色以包含这些权限和策略。）

     IAM 角色必须在其角色策略中包含以下权限：
     + `ecr:BatchCheckLayerAvailability`
     + `ecr:BatchGetImage`
     + `ecr:GetAuthorizationToken`
     + `ecr:GetDownloadUrlForLayer`

     IAM 角色必须包含以下自定义信任策略：

     有关如何创建 IAM 角色的更多信息，请参阅《IAM 用户指南》**中的[使用自定义信任策略创建角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html)。

     创建该角色后，必须通过环境将该角色分配给操作。有关更多信息，请参阅 [将环境与操作关联](deploy-environments-add-app-to-environment.md)。

   **ECR 映像 URL**、**Docker Hub 映像**或**映像 URL**

   指定下列项之一：
   + 如果您使用的是 `CODECATALYST` 注册表，请将映像设置为以下[活动映像](#build-curated-images)之一：
     + `CodeCatalystLinux_x86_64:2024_03`
     + `CodeCatalystLinux_x86_64:2022_11`
     + `CodeCatalystLinux_Arm64:2024_03`
     + `CodeCatalystLinux_Arm64:2022_11`
     + `CodeCatalystLinuxLambda_x86_64:2024_03`
     + `CodeCatalystLinuxLambda_x86_64:2022_11`
     + `CodeCatalystLinuxLambda_Arm64:2024_03`
     + `CodeCatalystLinuxLambda_Arm64:2022_11`
     + `CodeCatalystWindows_x86_64:2022_11`
   + 如果您使用的是 Docker Hub 注册表，请将映像设置为 Docker Hub 映像名称和可选标签。

     示例：`postgres:latest`
   + 如果您使用的是 Amazon ECR 注册表，请将映像设置为 Amazon ECR 注册表 URI。

     示例：`111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo`
   + 如果您使用的是自定义注册表，请将映像设置为自定义注册表所期望的值。

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

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

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

**使用 YAML 编辑器分配自定义运行时环境 Docker 映像**

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

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

1. 选择**编辑**。

1. 选择 **YAML**。

1. 找到要为其分配运行时环境 Docker 映像的操作。

1. 在操作中，添加一个 `Container` 部分以及底层的 `Registry` 和 `Image` 属性。有关更多信息，请参阅[操作](workflow-reference.md#actions-reference)中针对操作的 `Container`、`Registry` 和 `Image` 属性的描述。

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

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

------

## 示例
<a name="workflows-working-custom-image-ex"></a>

以下示例说明如何在工作流定义文件中将自定义运行时环境 Docker 映像分配给操作。

**Topics**
+ [示例：使用自定义运行时环境 Docker 映像通过 Amazon ECR 添加对 Node.js 18 的支持](#workflows-working-custom-image-ex-ecr-node18)
+ [示例：使用自定义运行时环境 Docker 映像通过 Docker Hub 添加对 Node.js 18 的支持](#workflows-working-custom-image-ex-docker-node18)

### 示例：使用自定义运行时环境 Docker 映像通过 Amazon ECR 添加对 Node.js 18 的支持
<a name="workflows-working-custom-image-ex-ecr-node18"></a>

以下示例说明如何使用自定义运行时环境 Docker 映像通过 [Amazon ECR](https://gallery.ecr.aws/amazonlinux/amazonlinux) 添加对 Node.js 18 的支持。

```
Configuration:
  Container:
    Registry: ECR
    Image: public.ecr.aws/amazonlinux/amazonlinux:2023
```

### 示例：使用自定义运行时环境 Docker 映像通过 Docker Hub 添加对 Node.js 18 的支持
<a name="workflows-working-custom-image-ex-docker-node18"></a>

以下示例说明如何使用自定义运行时环境 Docker 映像通过 [Docker Hub](https://hub.docker.com/_/node) 添加对 Node.js 18 的支持。

```
Configuration:
  Container:
    Registry: DockerHub
    Image: node:18.18.2
```