

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

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

# 指定运行时环境映像
<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
```