

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

# 在中更改构建项目设置 AWS CodeBuild
<a name="change-project"></a>

您可以使用 AWS CodeBuild 控制台 AWS CLI、或 AWS SDKs 来更改构建项目的设置。

如果您将测试报告添加到构建项目，请确保您的 IAM 角色具有[测试报告权限](test-permissions.md)中介绍的权限。

**Topics**
+ [更改构建项目的设置（控制台）](#change-project-console)
+ [更改构建项目的设置 (AWS CLI)](#change-project-cli)
+ [更改构建项目的设置 (AWS SDKs)](#change-project-sdks)

## 更改构建项目的设置（控制台）
<a name="change-project-console"></a>

要更改构建项目的设置，请执行以下过程：

1. 在 [https://console.aws.amazon.com/codesuite/codebuild](https://console.aws.amazon.com/codesuite/codebuild/home) /home 中打开 AWS CodeBuild 控制台。

1. 在导航窗格中，选择**构建项目**。

1. 请执行以下操作之一：
   + 选择要更改的构建项目的链接，然后选择**构建详细信息**。
   + 选择要更改的构建项目旁边的按钮，选择**查看详细信息**，然后选择**构建详细信息**。

您可以修改以下部分：

**Topics**
+ [项目配置](#change-project-console-project-config)
+ [来源](#change-project-console-source)
+ [环境](#change-project-console-environment)
+ [Buildspec](#change-project-console-buildspec)
+ [批量配置](#change-project-console-batch-config)
+ [构件](#change-project-console-artifacts)
+ [日志](#change-project-console-logs)

### 项目配置
<a name="change-project-console-project-config"></a>

在**项目配置**部分，选择**编辑**。完成更改后，请选择**更新配置**，以保存新的配置。

您可以修改以下属性。

**描述**  
输入构建项目的可选描述，以帮助其他用户了解此项目的用途。

**构建徽章**  
选择**启用构建徽章**，以使您的项目的构建状态可见且可嵌入。有关更多信息，请参阅 [构建徽章示例](sample-build-badges.md)。  
如果您的源提供商是 Amazon S3，则构建徽章不适用。

**启用并发构建限制**  
如果要限制此项目的并发构建数量，请执行以下步骤：  

1. 选择**限制此项目可以启动的并发构建数量**。

1. 在**并发构建限制**中，输入此项目允许的并发构建的最大数量。此限制不得大于为该账户设置的并发构建限制。如果您尝试输入大于账户限制的数字，则会显示错误消息。
仅当当前构建数量小于或等于此限值时，才会启动新构建。如果当前构建计数达到此限值，则新构建将受到限制且不会运行。

**启用公共构建访问权限**  <a name="change-project-console.public-builds"></a>
要向公众（包括无法访问 AWS 账户的用户）公开项目的生成结果，请选择 “**启用公共生成访问权限**”，然后确认要公开生成结果。以下属性用于公共构建项目：    
**公共构建服务角色**  
如果您想为您 CodeBuild 创建**新的服务角色**，请选择新服务角色；如果要使用**现有的服务角色**，请选择现有服务角色。  
公共生成服务角色 CodeBuild 允许读取 CloudWatch 日志并下载项目构建的 Amazon S3 工件。您必须执行此操作，才能向公众提供项目的构建日志和构件。  
**服务角色**  
输入新的服务角色名称或现有服务角色名称。
要将项目的构建结果设为私有，请清除**启用公共构建访问权限**。  
有关更多信息，请参阅 [获取公共构建项目 URL](public-builds.md)。  
在公开项目的构建结果时，应记住以下几点：  
+ 项目的所有构建结果、日志和构件，包括项目为私有状态时运行的构建，都可向公众开放。
+ 所有构建日志和构件都向公众开放。环境变量、源代码和其他敏感信息可能已输出到构建日志和构件中。您必须谨慎筛选将哪些信息输出到构建日志。以下是一些最佳实操：
  + 请勿在环境变量中存储敏感值，尤其是 AWS 访问密钥 ID 和私有访问密钥。我们建议您使用 Amazon EC2 Systems Manager 参数存储或 AWS Secrets Manager 存储敏感值。
  + 请按照[使用 Webhook 的最佳实操](webhooks.md#webhook-best-practices)对哪些实体可以触发构建进行限制且不要将 buildspec 存储在项目本身中，以尽可能确保您的 webhook 安全无虞。
+ 恶意用户可以使用公共构建分发恶意构件。我们建议项目管理员查看所有拉取请求，验证拉取请求是否为合法更改。我们还建议您使用校验和验证所有构件，确保下载的构件正确无误。

**其他信息**  
在**标签**中，输入您希望支持 AWS 服务使用的任何标签的名称和值。使用**添加行**添加标签。最多可以添加 50 个标签。

### 来源
<a name="change-project-console-source"></a>

在**源**部分中，请选择**编辑**。完成更改后，请选择**更新配置**，以保存新的配置。

您可以修改以下属性：

**源提供商**  
选择源代码提供商类型。使用以下列表为您的源提供商选择适当的选项：  
CodeBuild 不支持 Bitbucket 服务器。

------
#### [ Amazon S3 ]

 **存储桶**   
选择包含源代码的输入存储桶的名称。

 **S3 对象密钥或 S3 文件夹**   
输入 ZIP 文件的名称或包含源代码的文件夹的路径。输入正斜杠 (/) 以下载 S3 存储桶中的所有内容。

 **源版本**   
输入表示输入文件版本的对象的版本 ID。有关更多信息，请参阅 [源版本示例 AWS CodeBuild](sample-source-version.md)。

------
#### [ CodeCommit ]

 **存储库**   
选择要使用的存储库。

**参考类型**  
选择**分支**、**Git 标签**或**提交 ID**，以指定源代码的版本。有关更多信息，请参阅 [源版本示例 AWS CodeBuild](sample-source-version.md)。  
我们建议您选择看起来不像提交的 Git 分支名称 IDs，例如`811dd1ba1aba14473856cee38308caed7190c0d`或`5392f7`。这可以帮助您避免 Git 签出与实际提交发生冲突。

 **Git 克隆深度**   
选择该选项，以创建一个浅克隆，其历史记录会截断至指定数量的提交。如果您需要完整克隆，请选择**完整**。

**Git 子模块**  
如果您希望在存储库中包含 Git 子模块，请选择**使用 Git 子模块**。

------
#### [ Bitbucket ]

 **凭证**   
选择**默认来源凭证**或**自定义来源凭证**，然后按照说明管理默认来源凭证或自定义源凭证。

 **连接类型**   
选择**CodeConnections**、**OAuth**、**应用程序密码**或**个人访问令牌**进行连接 CodeBuild。

 **Connection**   
选择 Bitbucket 连接或 Secrets Manager 密钥，通过指定的连接类型进行连接。

 **存储库**   
选择**我的 Bitbucket 账户中的存储库**或**公共存储库**，然后输入存储库 URL。

 **源版本**   
输入分支、提交 ID、标签，或引用以及提交 ID。有关更多信息，请参阅 [源版本示例 AWS CodeBuild](sample-source-version.md)。  
我们建议您选择看起来不像提交的 Git 分支名称 IDs，例如`811dd1ba1aba14473856cee38308caed7190c0d`或`5392f7`。这可以帮助您避免 Git 签出与实际提交发生冲突。

 **Git 克隆深度**   
选择**Git 克隆深度**以创建一个浅克隆，其历史记录会截断至指定数量的提交。如果您需要完整克隆，请选择**完整**。

**Git 子模块**  
如果您希望在存储库中包含 Git 子模块，请选择**使用 Git 子模块**。

**构建状态**  
如果您希望向源提供商报告构建的开始和完成状态，请选择**在您的构建开始和完成时向源提供商报告构建状态**。  
为了能够向源提供商报告构建状态，与源提供商关联的用户必须拥有对存储库的写入权限。如果用户没有写入权限，则无法更新构建状态。有关更多信息，请参阅[源提供商访问权限](access-tokens.md)。  
在**状态上下文**中，输入要在 Bitbucket 提交状态中用于 `name` 参数的值。有关更多信息，请参阅 Bitbucket API 文档中的[构建](https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Bworkspace%7D/%7Brepo_slug%7D/commit/%7Bnode%7D/statuses/build)。  
在**目标 URL** 中，输入要在 Bitbucket 提交状态中用于 `url` 参数的值。有关更多信息，请参阅 Bitbucket API 文档中的[构建](https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Bworkspace%7D/%7Brepo_slug%7D/commit/%7Bnode%7D/statuses/build)。  
由 Webhook 触发的构建的状态将始终报告给源提供商。要将从控制台或 API 调用启动的构建状态报告给源提供商，您必须选择此设置。  
如果项目的构建通过 webhook 触发，则必须将新的提交推送到存储库，此设置才能生效。

如果**要在**每次将代码更改推送到此存储库时生成源代码**，请在 “主源 webhook 事件**” 中，选择 “每次将代码更改推送到此存储库时都重建”。 CodeBuild 有关 webhook 和筛选条件组的更多信息，请参阅 [Bitbucket Webhook 事件](bitbucket-webhook.md)。

------
#### [ GitHub ]

 **凭证**   
选择**默认来源凭证**或**自定义来源凭证**，然后按照说明管理默认来源凭证或自定义源凭证。

 **连接类型**   
选择要连接的**GitHub 应用程序**OAuth****、或**个人访问令牌** CodeBuild。

 **Connection**   
选择要通过您指定的 GitHub 连接类型进行连接或 Secrets Manager 密钥进行连接。

 **存储库**   
**在我的 GitHub 账户中选择 “存储库**”、“**公共存储库**” 或 “**GitHub 限定范围 webhook**”，然后输入存储库 URL。

 **源版本**   
输入分支、提交 ID、标签，或引用以及提交 ID。有关更多信息，请参阅 [源版本示例 AWS CodeBuild](sample-source-version.md)。  
我们建议您选择看起来不像提交的 Git 分支名称 IDs，例如`811dd1ba1aba14473856cee38308caed7190c0d`或`5392f7`。这可以帮助您避免 Git 签出与实际提交发生冲突。

 **Git 克隆深度**   
选择**Git 克隆深度**以创建一个浅克隆，其历史记录会截断至指定数量的提交。如果您需要完整克隆，请选择**完整**。

**Git 子模块**  
如果您希望在存储库中包含 Git 子模块，请选择**使用 Git 子模块**。

**构建状态**  
如果您希望向源提供商报告构建的开始和完成状态，请选择**在您的构建开始和完成时向源提供商报告构建状态**。  
为了能够向源提供商报告构建状态，与源提供商关联的用户必须拥有对存储库的写入权限。如果用户没有写入权限，则无法更新构建状态。有关更多信息，请参阅 [源提供商访问权限](access-tokens.md)。  
在**状态上下文**中，输入要用于 GitHub 提交状态的`context`参数的值。有关更多信息，请参阅 GitHub 开发者指南中的[创建提交状态](https://developer.github.com/v3/repos/statuses/#create-a-commit-status)。  
在 “**目标 URL**” 中，输入要用于 GitHub 提交状态的`target_url`参数的值。有关更多信息，请参阅 GitHub 开发者指南中的[创建提交状态](https://developer.github.com/v3/repos/statuses/#create-a-commit-status)。  
由 Webhook 触发的构建的状态将始终报告给源提供商。要将从控制台或 API 调用启动的构建状态报告给源提供商，您必须选择此设置。  
如果项目的构建通过 webhook 触发，则必须将新的提交推送到存储库，此设置才能生效。

如果**要在**每次将代码更改推送到此存储库时生成源代码**，请在 “主源 webhook 事件**” 中，选择 “每次将代码更改推送到此存储库时都重建”。 CodeBuild 有关 webhook 和筛选条件组的更多信息，请参阅 [GitHub webhook 事件](github-webhook.md)。

------
#### [ GitHub Enterprise Server ]

 **凭证**   
选择**默认来源凭证**或**自定义来源凭证**，然后按照说明管理默认来源凭证或自定义源凭证。

 **连接类型**   
选择**CodeConnections**要连接的**个人访问令牌** CodeBuild。

 **Connection**   
选择 GitHub 企业连接或 Secrets Manager 密钥通过您指定的连接类型进行连接。

 **存储库**   
**在我的 GitHub 企业帐户中选择存储库或GitHub 企业级****范围的 webhook**，然后输入存储库 URL。

**源版本**  
输入拉取请求、分支、提交 ID、标签，或引用以及提交 ID。有关更多信息，请参阅 [源版本示例 AWS CodeBuild](sample-source-version.md)。  
我们建议您选择看起来不像提交的 Git 分支名称 IDs，例如`811dd1ba1aba14473856cee38308caed7190c0d`或`5392f7`。这可以帮助您避免 Git 签出与实际提交发生冲突。

**Git 克隆深度**  
选择**Git 克隆深度**以创建一个浅克隆，其历史记录会截断至指定数量的提交。如果您需要完整克隆，请选择**完整**。

**Git 子模块**  
如果您希望在存储库中包含 Git 子模块，请选择**使用 Git 子模块**。

**构建状态**  
如果您希望向源提供商报告构建的开始和完成状态，请选择**在您的构建开始和完成时向源提供商报告构建状态**。  
为了能够向源提供商报告构建状态，与源提供商关联的用户必须拥有对存储库的写入权限。如果用户没有写入权限，则无法更新构建状态。有关更多信息，请参阅 [源提供商访问权限](access-tokens.md)。  
在**状态上下文**中，输入要用于 GitHub 提交状态的`context`参数的值。有关更多信息，请参阅 GitHub 开发者指南中的[创建提交状态](https://developer.github.com/v3/repos/statuses/#create-a-commit-status)。  
在 “**目标 URL**” 中，输入要用于 GitHub 提交状态的`target_url`参数的值。有关更多信息，请参阅 GitHub 开发者指南中的[创建提交状态](https://developer.github.com/v3/repos/statuses/#create-a-commit-status)。  
由 Webhook 触发的构建的状态将始终报告给源提供商。要将从控制台或 API 调用启动的构建状态报告给源提供商，您必须选择此设置。  
如果项目的构建通过 webhook 触发，则必须将新的提交推送到存储库，此设置才能生效。

**不安全的 SSL**  
选择 “**启用不安全 SSL**” 以在连接到 GitHub 企业项目存储库时忽略 SSL 警告。

如果**要在**每次将代码更改推送到此存储库时生成源代码**，请在 “主源 webhook 事件**” 中，选择 “每次将代码更改推送到此存储库时都重建”。 CodeBuild 有关 webhook 和筛选条件组的更多信息，请参阅 [GitHub webhook 事件](github-webhook.md)。

------
#### [ GitLab ]

 **凭证**   
选择**默认来源凭证**或**自定义来源凭证**，然后按照说明管理默认来源凭证或自定义源凭证。

 **连接类型**   
**CodeConnections**用于连接 GitLab 到 CodeBuild。

 **Connection**   
选择要 GitLab 连接的连接 CodeConnections。

 **存储库**   
选择要使用的存储库。

 **源版本**   
输入拉取请求 ID、分支、提交 ID、标签，或引用以及提交 ID。有关更多信息，请参阅 [源版本示例 AWS CodeBuild](sample-source-version.md)。  
我们建议您选择看起来不像提交的 Git 分支名称 IDs，例如`811dd1ba1aba14473856cee38308caed7190c0d`或`5392f7`。这可以帮助您避免 Git 签出与实际提交发生冲突。

 **Git 克隆深度**   
选择**Git 克隆深度**以创建一个浅克隆，其历史记录会截断至指定数量的提交。如果您需要完整克隆，请选择**完整**。

**构建状态**  
如果您希望向源提供商报告构建的开始和完成状态，请选择**在您的构建开始和完成时向源提供商报告构建状态**。  
为了能够向源提供商报告构建状态，与源提供商关联的用户必须拥有对存储库的写入权限。如果用户没有写入权限，则无法更新构建状态。有关更多信息，请参阅 [源提供商访问权限](access-tokens.md)。

------
#### [ GitLab Self Managed ]

 **凭证**   
选择**默认来源凭证**或**自定义来源凭证**，然后按照说明管理默认来源凭证或自定义源凭证。

 **连接类型**   
**CodeConnections**用于将 GitLab 自助管理连接到 CodeBuild。

 **Connection**   
选择要连接的 GitLab 自管理连接 CodeConnections。

 **存储库**   
选择要使用的存储库。

 **源版本**   
输入拉取请求 ID、分支、提交 ID、标签，或引用以及提交 ID。有关更多信息，请参阅 [源版本示例 AWS CodeBuild](sample-source-version.md)。  
我们建议您选择看起来不像提交的 Git 分支名称 IDs，例如`811dd1ba1aba14473856cee38308caed7190c0d`或`5392f7`。这可以帮助您避免 Git 签出与实际提交发生冲突。

 **Git 克隆深度**   
选择**Git 克隆深度**以创建一个浅克隆，其历史记录会截断至指定数量的提交。如果您需要完整克隆，请选择**完整**。

**构建状态**  
如果您希望向源提供商报告构建的开始和完成状态，请选择**在您的构建开始和完成时向源提供商报告构建状态**。  
为了能够向源提供商报告构建状态，与源提供商关联的用户必须拥有对存储库的写入权限。如果用户没有写入权限，则无法更新构建状态。有关更多信息，请参阅 [源提供商访问权限](access-tokens.md)。

------

### 环境
<a name="change-project-console-environment"></a>

在**环境**部分中，选择**编辑**。完成更改后，请选择**更新配置**，以保存新的配置。

您可以修改以下属性：

**预置模型**  
要更改预置模型，请选择**更改预置模型**并执行下列操作之一：  
+ 要使用由管理的按需队列 AWS CodeBuild，请选择**按需**。使用按需队列，为您的构建 CodeBuild 提供计算。构建完成后，计算机就会被销毁。按需实例集是完全托管式的，并包括自动扩展功能以应对需求激增。
+ 要使用由管理的预留容量队列 AWS CodeBuild，请选择**预留容量**，然后选择**队列名称**。使用预留容量实例集，您可以为构建环境配置一组专用实例。这些计算机保持闲置状态，可以立即处理生成或测试，并缩短构建持续时间。使用预留容量实例集，您的计算机将始终处于运行状态，并且只要预调配完毕，它们就会继续产生成本。
有关信息，请参阅[在预留容量实例集上运行构建](fleets.md)。

**环境映像**  
要更改构建映像，请选择**覆盖映像**，然后执行以下操作之一：  
+ 要使用由管理的 Docker 映像 AWS CodeBuild，请选择**托管映像**，然后从 “**操作系统**”、“**运行时**”、“映像” 和 “**映像****版本**” 中进行选择。从**环境类型**中进行选择（如果可用）。
+ 要使用其他 Docker 映像，请选择**自定义映像**。对于**环境类型**，请选择 **ARM**、**Linux**、**Linux GPU** 或 **Windows**。如果您针对**外部注册表 URL** 选择**其他注册表**，请使用 `docker repository/docker image name` 格式在 Docker Hub 中输入 Docker 映像的名称和标签。如果您选择 **Amazon ECR**，请使用**亚马逊 ECR 存储库和** A **mazon ECR 镜像**在您的账户中选择 Docker 镜像。 AWS 
+ 要使用私有 Docker 映像，请选择**自定义映像**。对于**环境类型**，请选择 **ARM**、**Linux**、**Linux GPU** 或 **Windows**。对于**映像注册表**，选择**其他注册表**，然后输入您的私有 Docker 映像的凭证的 ARN。凭证必须由 Secrets Manager 创建。有关更多信息，请参阅《AWS Secrets Manager 用户指南》中的[什么是 AWS Secrets Manager？](https://docs.aws.amazon.com/secretsmanager/latest/userguide/)。
CodeBuild 会替换自定义 Docker 镜像的。`ENTRYPOINT`

**服务角色**  
请执行以下操作之一：  
+ 如果您没有 CodeBuild 服务角色，请选择 “**新建服务角色**”。在**角色名称**中，为新角色输入名称。
+ 如果您有 CodeBuild 服务角色，请选择**现有服务角色**。在**角色 ARN** 中，选择服务角色。
使用控制台创建构建项目时，可以同时创建 CodeBuild 服务角色。默认情况下，这个角色仅能与该构建项目配合使用。如果您使用控制台将此服务角色与另一个构建项目关联，则此角色将更新以便与关联的构建项目结合使用。一个服务角色最多可与 10 个构建项目结合使用。

**其他配置**    
**超时**  
指定一个介于 5 分钟到 36 小时之间的值，如果构建未完成，则在该值之后 CodeBuild 停止构建。如果**小时**和**分钟**都留空，则将使用 60 分钟的默认值。  
**特权**  
仅当您打算使用此构建项目来构建 Docker 映像时，才应选择**如果要构建 Docker 映像或希望您的构建获得提升的特权，请启用此标志**。否则，尝试与 Docker 守护程序交互的所有关联的构建都将失败。您还必须启动 Docker 守护程序，以便您的构建与其交互。执行此操作的一种方法是通过运行以下构建命令在您的构建规范的 `install` 阶段初始化 Docker 守护程序。如果您选择了由 CodeBuild Docker 支持的构建环境镜像，请不要运行这些命令。  
默认情况下，为非 VPC 构建启用 Docker 进程守护程序。如果您想使用 Docker 容器进行 VPC 构建，请参阅 Docker 文档网站上的[运行时权限和 Linux 功能](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities)并启用特权模式。此外，Windows 不支持特权模式。

```
- nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay2 &
- timeout 15 sh -c "until docker info; do echo .; sleep 1; done"
```  
**VPC**  
如果您 CodeBuild 想使用您的 VPC：  
+ 对于 **VPC**，请选择 CodeBuild 使用的 VPC ID。
+ 对于 **VPC 子网**，请选择包含使用的 CodeBuild 资源的子网。
+ 对于 **VPC 安全组**，请选择 CodeBuild 用于允许访问中的资源的安全组 VPCs。
有关更多信息，请参阅 [AWS CodeBuild 与亚马逊 Virtual Private Cloud 一起使用](vpc-support.md)。  
**计算**  
请选择可用选项之一。  
**注册表凭证**  
使用非私有注册表映像配置项目时，请指定注册表凭证。  
仅当映像被私有注册表中的映像覆盖时，才会使用此凭证。  
**环境变量**  
请输入每个环境变量的名称和值，然后选择类型，以供构建使用。  
CodeBuild 自动为您的 AWS 地区设置环境变量。如果您尚未将以下环境变量添加到 buildspec.yml 中，则必须设置这些变量：  
+ AWS\$1ACCOUNT\$1ID
+ IMAGE\$1REPO\$1NAME
+ IMAGE\$1TAG
控制台和 AWS CLI 用户可以看到环境变量。如果您不担心环境变量的可见性，请设置**名称**和**值**字段，然后将**类型**设置为**明文**。  
我们建议您将具有敏感值的环境变量（例如访问密钥 ID、私有 AWS 访问 AWS 密钥或密码）作为参数存储在 Amazon EC2 Systems Manager Parameter Store 或 AWS Secrets Manager。  
如果您使用的是 Amazon EC2 Systems Manager Parameter Store，则对于**类型**，请选择**参数**。在**名称**中，输入 CodeBuild 要引用的标识符。对于**值**，请按照 Amazon EC2 Systems Manager Parameter Store 中存储的参数名称输入参数名称。使用名为 `/CodeBuild/dockerLoginPassword` 的参数作为示例，对于**类型**，选择**参数**。对于**名称**，请输入 `LOGIN_PASSWORD`。对于**值**，请输入 `/CodeBuild/dockerLoginPassword`。  
如果您使用 Amazon EC2 Systems Manager Parameter Store，我们建议您使用以 `/CodeBuild/` 开头的参数名称（例如，`/CodeBuild/dockerLoginPassword`）来存储参数。您可以使用 CodeBuild 控制台在 Amazon EC2 Systems Manager 中创建参数。选择**创建参数**，然后按照对话框中的说明操作。（在该对话框中，对于 **KMS 密钥**，您可以指定账户中 AWS KMS 密钥的 ARN。 Amazon EC2 Systems Manager 使用此密钥在存储期间加密参数的值，并在检索期间对其进行解密。） 如果您使用 CodeBuild 控制台创建参数，则控制台会以存储参数名称`/CodeBuild/`的开头。有关更多信息，请参阅《Amazon EC2 Systems Manager 用户指南》**中的 [Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-paramstore.html) 和 [Systems Manager Parameter Store 控制台演练](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-walk.html#sysman-paramstore-console)。  
如果您的构建项目引用了 Amazon EC2 Systems Manager Parameter Store 中存储的参数，则构建项目的服务角色必须允许 `ssm:GetParameters` 操作。如果您之前选择了 “**新建服务角色**”，请将此操作 CodeBuild 包含在构建项目的默认服务角色中。但是，如果您选择了**现有服务角色**，必须单独将此操作添加到您的服务角色中。  
如果您的构建项目引用了 Amazon EC2 Systems Manager Parameter Store 中存储的但参数名称不以 `/CodeBuild/` 开头的参数，且您选择了**新建服务角色**，您必须更新该服务角色以允许访问不以 `/CodeBuild/` 开头的参数名称。这是因为该服务角色仅允许访问以 `/CodeBuild/` 开头的参数名称。  
如果您选择**新建服务角色**，服务角色将拥有解密 Amazon EC2 Systems Manager Parameter Store 中 `/CodeBuild/` 命名空间下的所有参数的权限。  
您设置的环境变量将替换现有的环境变量。例如，如果 Docker 映像已经包含一个名为 `MY_VAR` 的环境变量（值为 `my_value`），并且您设置了一个名为 `MY_VAR` 的环境变量（值为 `other_value`），那么 `my_value` 将被替换为 `other_value`。同样，如果 Docker 映像已经包含一个名为 `PATH` 的环境变量（值为 `/usr/local/sbin:/usr/local/bin`），并且您设置了一个名为 `PATH` 的环境变量（值为 `$PATH:/usr/share/ant/bin`），那么`/usr/local/sbin:/usr/local/bin` 将被替换为文本值 `$PATH:/usr/share/ant/bin`。  
请勿使用以 `CODEBUILD_` 打头的名称设置任何环境变量。此前缀是专为内部使用预留的。  
如果具有相同名称的环境变量在多处都有定义，则应按照如下方式确定其值：  
+ 构建操作调用开始时的值优先级最高。
+ 构建项目定义中的值优先级次之。
+ buildspec 声明中的值优先级最低。
如果您使用 Secrets Manager，对于**类型**，请选择 **Secrets Manager**。在**名称**中，输入 CodeBuild 要引用的标识符。对于**值**，请使用模式 `secret-id:json-key:version-stage:version-id` 输入 `reference-key`。有关信息，请参阅 [Secrets Manager reference-key in the buildspec file](build-spec-ref.md#secrets-manager-build-spec)。  
如果您使用 Secrets Manager，我们建议您存储名称以 `/CodeBuild/`（例如 `/CodeBuild/dockerLoginPassword`）开头的密钥。有关更多信息，请参阅《AWS Secrets Manager 用户指南》中的[什么是 AWS Secrets Manager？](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)。  
如果您的构建项目引用了 Secrets Manager 中存储的密钥，则构建项目的服务角色必须允许 `secretsmanager:GetSecretValue` 操作。如果您之前选择了 “**新建服务角色**”，请将此操作 CodeBuild 包含在构建项目的默认服务角色中。但是，如果您选择了**现有服务角色**，必须单独将此操作添加到您的服务角色中。  
如果您的构建项目引用了 Secrets Manager 中存储的但密钥名称不以 `/CodeBuild/` 开头的密钥，且您选择了**新建服务角色**，您必须更新该服务角色以允许访问不以 `/CodeBuild/` 开头的密钥名称。这是因为该服务角色仅允许访问以 `/CodeBuild/` 开头的密钥名称。  
如果您选择**新建服务角色**，该服务角色将拥有解密 Secrets Manager 中 `/CodeBuild/` 命名空间下的所有密钥的权限。

### Buildspec
<a name="change-project-console-buildspec"></a>

在 **Buildspec** 部分，选择**编辑**。完成更改后，请选择**更新配置**，以保存新的配置。

您可以修改以下属性：

**构建规范**  
请执行以下操作之一：  
+ 如果您的源代码包含 buildspec 文件，请选择**使用 buildspec 文件**。默认情况下， CodeBuild 在源代码根目录中查找名为 `buildspec.yml` 的文件。如果您的 buildspec 文件使用其他名称或位置，请在 **Buildspec 名称**中输入其从源根目录开始的路径（例如，`buildspec-two.yml` 或 `configuration/buildspec.yml`。如果 buildspec 文件位于 S3 存储桶中，则该存储桶必须位于您的构建项目所在的同一 AWS 区域中。使用 ARN（例如 `arn:aws:s3:::<my-codebuild-sample2>/buildspec.yml`）指定该 buildspec 文件。
+ 如果您的源代码不包括 buildspec 文件，或者如果您要运行的构建命令不是在源代码根目录的 `buildspec.yml` 文件中为 `build` 阶段指定的构建命令，则选择**插入构建命令**。对于**构建命令**，请输入您要在 `build` 阶段运行的命令。对于多个命令，使用 `&&` 分开各个命令（例如 `mvn test && mvn package`）。要在其他阶段运行命令，或者，如果 `build` 阶段对应的命令列表特别长，请将 `buildspec.yml` 文件添加到源代码根目录，将命令添加到该文件中，然后选择**在源代码根目录中使用 buildspec.yml**。
有关更多信息，请参阅[Buildspec 参考](build-spec-ref.md)。

### 批量配置
<a name="change-project-console-batch-config"></a>

在**批量配置**部分，选择**编辑**。完成更改后，请选择**更新配置**，以保存新的配置。有关更多信息，请参阅 [批量运行构建](batch-build.md)。

您可以修改以下属性：

**批量服务角色**  
为批量构建提供服务角色。  
选择下列选项之一：  
+ 如果您没有批量服务角色，请选择**新建服务角色**。在**服务角色**中，为新角色输入名称。
+ 如果您拥有批量服务角色，请选择**现有服务角色**。在**服务角色**中，选择对应的服务角色。
批量构建为批量配置引入了全新的安全角色。这个新角色是必需的，因为 CodeBuild 必须能够代表你调用`StartBuild``StopBuild`、和`RetryBuild`操作才能将生成作为批处理的一部分运行。客户应该使用新角色，而不是他们在构建中使用的角色，原因有两个：  
+ 向构建角色授予 `StartBuild`、`StopBuild` 和 `RetryBuild` 权限后，将允许单个构建通过 buildspec 启动多个构建。
+ CodeBuild 批处理生成提供了限制，限制了可用于批次构建的生成数量和计算类型。如果构建角色拥有这些权限，则构建本身就有可能绕过这些限制。

**批量支持的计算类型**  
选择批处理允许的计算类型。选择所有适用的选项。

**批量支持的实例集**  
选择批量支持的实例集。选择所有适用的选项。

**批处理允许的最大构建数量**  
输入批处理允许的最大构建数量。如果批处理超过此限制，则会失败。

**批处理超时**  
输入完成批量构建能够使用的最长时间。

**合并构件**  
选择**将批处理中的所有构件合并到一个位置**，将批处理中的所有构件合并到一个位置。

 **批量报告模式**   
为批量构建选择所需的构建状态报告模式。  
**仅当项目源为 Bitbucket 或 E GitHub nterprise 时，此字段才可用，并且在 “**来源” 下选择了生成开始和完成时向源提供商报告构建状态**。 GitHub**  
 **聚合构建**   
选择该选项，可将批处理中所有构建的状态合并到一个状态报告中。  
 **单个构建**   
选择该选项，可分别报告批处理中所有构建的构建状态。

### 构件
<a name="change-project-console-artifacts"></a>

在**构件**部分中，选择**编辑**。完成更改后，请选择**更新配置**，以保存新的配置。

您可以修改以下属性：

**类型**  
请执行以下操作之一：  
+ 如果您不想创建任何构建输出构件，请选择**无构件**。如果您只运行构建测试，或者您要将 Docker 映像推送到 Amazon ECR 存储库，建议执行此操作。
+ 要将构建输出存储在 S3 存储桶中，请选择 **Amazon S3**，然后执行以下操作：
  + 如果要将项目名称用于构建输出 ZIP 文件或文件夹，请将**名称**留空。否则，请输入名称。（如果您要输出 ZIP 文件，并且要让 ZIP 文件包含文件扩展名，请务必在 ZIP 文件名之后添加扩展名。）
  + 如果希望构建规范文件中指定的名称覆盖控制台中指定的任何名称，请选择**启用语义版本控制**。buildspec 文件中的名称是构建时计算得出的，使用 Shell 命令语言。例如，您可以将日期和时间附加到您的构件名称后面，以便确保其唯一性。为构件提供唯一名称可防止其被覆盖。有关更多信息，请参阅[buildspec 语法](build-spec-ref.md#build-spec-ref-syntax)。
  + 对于**存储桶名称**，请选择输出存储桶的名称。
  + 如果您在此过程的前面部分选择了**插入构建命令**，那么对于**输出文件**，请输入构建（该构建要放到构建输出 ZIP 文件或文件夹中）中的文件位置。对于多个位置，使用逗号将各个位置隔开（例如，`appspec.yml, target/my-app.jar`）。有关更多信息，请参阅[buildspec 语法](build-spec-ref.md#build-spec-ref-syntax)中 `files` 的描述。
  + 如果不想加密构建构件，请选择**删除构件加密**。
对于所需的每个辅助构件集：  

1. 对于**构件标识符**，输入少于 128 个字符且仅包含字母数字字符和下划线的值。

1. 选择**添加构件**。

1. 按照前面步骤的说明配置辅助构件。

1. 选择**保存构件**。

**其他配置**    
**加密密钥**  
请执行以下操作之一：  
+ 要使用您账户中的 AWS 托管式密钥 Amazon S3 加密构建输出项目，请将**加密密钥**留空。这是默认值。
+ 要使用客户托管密钥加密构建输出构件，请在**加密密钥**中输入客户托管密钥的 ARN。采用格式 `arn:aws:kms:region-ID:account-ID:key/key-ID`。  
**缓存类型**  
对于**缓存类型**，请选择下列选项之一：  
+ 如果您不想使用缓存，请选择**无缓存**。
+ 如果要使用 Amazon S3 缓存，请选择 **Amazon S3**，然后执行以下操作：
  + 对于**存储桶**，选择存储缓存的 S3 存储桶的名称。
  + （可选）对于**缓存路径前缀**，输入 Amazon S3 路径前缀。**缓存路径前缀**值类似于目录名称。它使您能够在存储桶的同一目录下存储缓存。
**重要**  
请勿将尾部斜杠 (/) 附加到路径前缀后面。
+  如果想要使用本地缓存，请选择**本地**，然后选择一个或多个本地缓存模式。
**注意**  
Docker 层缓存模式仅适用于 Linux。如果您选择该模式，您的项目必须在特权模式下运行。
使用缓存可节省大量构建时间，因为构建环境的可重用部分被存储在缓存中，并且可跨构建使用。有关在 buildspec 文件中指定缓存的信息，请参阅[buildspec 语法](build-spec-ref.md#build-spec-ref-syntax)。有关缓存的更多信息，请参阅 [缓存构建以提高性能](build-caching.md)。

### 日志
<a name="change-project-console-logs"></a>

在**标签**部分中，选择**编辑**。完成更改后，请选择**更新配置**，以保存新的配置。

您可以修改以下属性：

选择要创建的日志。您可以创建 Amazon CloudWatch 日志、Amazon S3 日志或两者兼而有之。

**CloudWatch**  
如果你想要 Amazon CloudWatch Logs 日志：    
**CloudWatch logs**  
选择 **CloudWatch logs (CloudWatch 日志)**。  
**组名**  
输入您的 Amazon CloudWatch 日志组的名称。  
**流名称**  
输入您的 Amazon CloudWatch 日志流名称。

**S3**  
如果要创建 Amazon S3 日志：    
**S3 日志**  
选择 **S3 日志**。  
**存储桶**  
选择您的日志的 S3 存储桶的名称。  
**路径前缀**  
输入日志的前缀。  
**禁用 S3 日志加密**  
如果您不希望加密您的 S3 日志，请选择此选项。

## 更改构建项目的设置 (AWS CLI)
<a name="change-project-cli"></a>

有关 AWS CLI 搭配使用的信息 AWS CodeBuild，请参阅[命令行参考](cmd-ref.md)。

要使用更新 CodeBuild 项目 AWS CLI，请使用更新后的属性创建一个 JSON 文件并将该文件传递给[https://docs.aws.amazon.com/cli/latest/reference/codebuild/update-project.html](https://docs.aws.amazon.com/cli/latest/reference/codebuild/update-project.html)命令。更新文件中未包含的所有属性保持不变。

在更新 JSON 文件中，只需要 `name` 属性和修改的属性。`name` 属性用于标识要修改的项目。对于任何修改的结构，还必须包括这些结构所需的参数。例如，要修改项目的环境，需要 `environment/type` 和 `environment/computeType` 属性。以下是更新环境映像的示例：

```
{
  "name": "<project-name>",
  "environment": {
    "type": "LINUX_CONTAINER",
    "computeType": "BUILD_GENERAL1_SMALL",
    "image": "aws/codebuild/amazonlinux-x86_64-standard:4.0"
  }
}
```

如果需要获取项目的当前属性值，请使用 [https://docs.aws.amazon.com/cli/latest/reference/codebuild/batch-get-projects.html](https://docs.aws.amazon.com/cli/latest/reference/codebuild/batch-get-projects.html) 命令获取正在修改的项目的当前属性，然后将输出写入到文件。

```
aws codebuild batch-get-projects --names "<project-name>" > project-info.json
```

该*project-info.json*文件包含一组项目，因此不能直接用于更新项目。但是，您可以从*project-info.json*文件中复制要修改的属性，然后将其粘贴到更新文件中，作为要修改的属性的基准。有关更多信息，请参阅 [查看构建项目的详细信息 (AWS CLI)](view-project-details.md#view-project-details-cli)。

按照 [创建构建项目 (AWS CLI)](create-project.md#create-project-cli) 中所述修改更新 JSON 文件，然后保存结果。修改更新 JSON 文件后，请运行 [https://docs.aws.amazon.com/cli/latest/reference/codebuild/update-project.html](https://docs.aws.amazon.com/cli/latest/reference/codebuild/update-project.html) 命令，传递更新 JSON 文件。

```
aws codebuild update-project --cli-input-json file://<update-project-file>
```

如果成功，则更新后的项目 JSON 将显示在输出中。如果缺少任何必需的参数，则会在输出中显示一条错误消息，标识缺少的参数。例如，如果缺少 `environment/type` 参数，则会显示以下错误消息：

```
aws codebuild update-project --cli-input-json file://update-project.json

Parameter validation failed:
Missing required parameter in environment: "type"
```

## 更改构建项目的设置 (AWS SDKs)
<a name="change-project-sdks"></a>

有关 AWS CodeBuild 与一起使用的信息 AWS SDKs，请参阅[AWS SDKs 和工具参考](sdk-ref.md)。