创建构建项目 (控制台) - Amazon CodeBuild
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

创建构建项目 (控制台)

打开Amazon CodeBuild控制台https://console.aws.amazon.com/codesuite/codebuild/home.

如果显示 CodeBuild 信息页面,请选择。创建构建项目. 否则,在导航窗格中,展构建中,选择构建项目,然后选择创建构建项目.

选择 Create build project (创建构建项目)

填充以下部分。完成后,请选择创建构建项目在页面底部。

Project Config

项目名称

输入此构建项目的名称。构建项目名称在您的各个 Amazon 账户内必须是唯一的。

描述

输入生成项目的可选描述,以帮助其他用户了解此项目的用途。

构建徽章

(可选)选择启用 Build 徽章使您的项目的构建状态可见且可嵌入。有关更多信息,请参阅构建徽章示例

注意

如果您的源提供商是 Amazon S3,则构建徽章不适用。

启用并发构建限制

(可选)如果要限制此项目的并发构建数,请执行以下步骤:

  1. Select限制此项目可以启动的并发生成的数量.

  2. In并发构建限制中,输入此项目允许的并发构建的最大数量。此限制不能大于为帐户设置的并发构建限制。如果您尝试输入大于账户限制的数字,则会显示一条错误消息。

仅当当前构建数量小于或等于此限值时,才会启动新构建。如果当前构建计数达到此限值,则新构建将受到限制且不会运行。

其他信息

(可选)对于 Tags (标签),输入您希望支持 Amazon 服务使用的任何标签的名称和值。使用 Add row 添加标签。您最多可以添加 50 个标签。

Source

源提供商

选择源代码提供商类型。使用以下列表为您的源提供商选择适当的选项:

注意

CodeBuild 不支持比特桶服务器。

Amazon S3
存储桶

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

S3 对象键或 S3 文件夹

输入 ZIP 文件的名称或包含源代码的文件夹的路径。

源版本

输入表示您输入文件构建的对象的版本 ID。有关更多信息,请参阅使用 Amazon CodeBuild 的源版本示例

CodeCommit
存储库

选择要使用的存储库。

参考类型

选择分支Git 标签,或者提交 ID指定源代码的版本。有关更多信息,请参阅使用 Amazon CodeBuild 的源版本示例

Git clone 深度

选择以创建一个浅克隆,其历史记录会截断至指定数量的提交。如果您需要完整克隆,请选择 Full (完整)

Git 子模块

如果您希望在存储库中包含 Git 子模块,请选择 Use Git submodules (使用 Git 子模块)

Bitbucket
存储库

选择使用 OAuth Connect或者使用 Bitbucket app 密码进行 Connect并按照说明连接(或重新连接)到 Bitbucket。

选择一个公共存储库或您账户中的某个存储库。

源版本

输入分支、提交 ID、标签或参考和提交 ID。有关更多信息,请参阅 。使用 Amazon CodeBuild 的源版本示例

Git clone 深度

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

Git 子模块

如果您希望在存储库中包含 Git 子模块,请选择 Use Git submodules (使用 Git 子模块)

生成包状态

Select在构建开始和完成时向源提供商报告构建状态(如果您希望向源提供商报告构建的开始和完成状态)。

为了能够向源提供程序报告构建状态,与源提供程序关联的用户必须具有对仓库的写入访问权限。如果用户没有写访问权限,则无法更新构建状态。有关更多信息,请参阅源提供商访问权限

注意

由 Webhook 触发的构建的状态将始终报告给您的源提供商。

适用于状态上下文中,输入要用于name参数处于 Bitbucket 提交状态。有关更多信息,请参阅 Bitbucket API 文档中的 生成

适用于目标 URL中,输入要用于url参数处于 Bitbucket 提交状态。有关更多信息,请参阅 Bitbucket API 文档中的 生成

In主要源 Webhook 事件中,选择每次将代码更改推送到此存储库时都会重新构建。如果您希望 CodeBuild 在每次代码更改被推送到此存储库时构建源代码。有关 webhook 和筛选器组的更多信息,请参阅。Bitbucket Webhook 事件.

GitHub
存储库

选择使用 OAuth Connect或者使用 GitHub 个人访问令牌进行 Connect并按照说明连接 (或重新连接) 到 GitHub 并授予对Amazon CodeBuild.

选择一个公共存储库或您账户中的某个存储库。

源版本

输入分支、提交 ID、标签或参考和提交 ID。有关更多信息,请参阅 。使用 Amazon CodeBuild 的源版本示例

Git clone 深度

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

Git 子模块

如果您希望在存储库中包含 Git 子模块,请选择 Use Git submodules (使用 Git 子模块)

生成包状态

Select在构建开始和完成时向源提供商报告构建状态(如果您希望向源提供商报告构建的开始和完成状态)。

为了能够向源提供程序报告构建状态,与源提供程序关联的用户必须具有对仓库的写入访问权限。如果用户没有写访问权限,则无法更新构建状态。有关更多信息,请参阅源提供商访问权限

注意

由 Webhook 触发的构建的状态将始终报告给您的源提供商。

适用于状态上下文中,输入要用于context参数中的 GitHub 提交状态。有关更多信息,请参阅 GitHub 开发人员指南中的创建提交状态

适用于目标 URL中,输入要用于target_url参数中的 GitHub 提交状态。有关更多信息,请参阅 GitHub 开发人员指南中的创建提交状态

In主要源 Webhook 事件中,选择每次将代码更改推送到此存储库时都会重新构建。如果您希望 CodeBuild 在每次代码更改被推送到此存储库时构建源代码。有关 webhook 和筛选器组的更多信息,请参阅。GitHub Webhook 事件.

GitHub Enterprise Server
GitHub 企业个人访问令牌

请参阅GitHub Enterprise Server 示例以了解有关如何将个人访问令牌复制到剪贴板的信息。在文本字段中粘贴令牌,然后选择 Save Token (保存令牌)

注意

您只需输入并保存一次个人访问令牌。CodeBuild 在未来的所有项目中都使用此令牌。

源版本

输入拉取请求、分支、提交 ID、标签或参考和提交 ID。有关更多信息,请参阅使用 Amazon CodeBuild 的源版本示例

Git clone 深度

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

Git 子模块

如果您希望在存储库中包含 Git 子模块,请选择 Use Git submodules (使用 Git 子模块)

生成包状态

Select在构建开始和完成时向源提供商报告构建状态(如果您希望向源提供商报告构建的开始和完成状态)。

为了能够向源提供程序报告构建状态,与源提供程序关联的用户必须具有对仓库的写入访问权限。如果用户没有写访问权限,则无法更新构建状态。有关更多信息,请参阅源提供商访问权限

注意

由 Webhook 触发的构建的状态将始终报告给您的源提供商。

适用于状态上下文中,输入要用于context参数中的 GitHub 提交状态。有关更多信息,请参阅 GitHub 开发人员指南中的创建提交状态

适用于目标 URL中,输入要用于target_url参数中的 GitHub 提交状态。有关更多信息,请参阅 GitHub 开发人员指南中的创建提交状态

SSL 不安全

选择 Enable insecure SSL (启用不安全的 SSL),在连接到您的 GitHub Enterprise 项目存储库时忽略 SSL 警告。

In主要源 Webhook 事件中,选择每次将代码更改推送到此存储库时都会重新构建。如果您希望 CodeBuild 在每次代码更改被推送到此存储库时构建源代码。有关 webhook 和筛选器组的更多信息,请参阅。GitHub Webhook 事件.

Environment

环境映像

请执行下列操作之一:

  • 要使用由 Amazon CodeBuild 托管的 Docker 映像,请选择 Managed image (托管映像),然后从 Operating system (操作系统)Runtime(s) (运行时)Image (映像) 以及 Image version (映像版本) 中进行相应选择。从 Environment type (环境类型) 中进行选择(如果可用)。

  • 要使用其他 Docker 映像,请选择 Custom image (自定义映像)。适用于环境类型中,选择ARMLinuxLinux GPU,或者Windows. 如果选择。其他注册机构, 用于External 外部注册表 URL中,在 Docker Hub 中按照格式输入 Docker 映像的名称和标签。docker repository/docker image name. 如果选择。Amazon ECR,使用Amazon ECR 存储库Amazon ECR 图片选择 Docker 镜像Amazonaccount.

  • 要使用私有 Docker 映像,请选择 Clouker 映像自定义映像. 适用于环境类型中,选择ARMLinuxLinux GPU,或者Windows. 对于 Image registry (映像注册表),选择 Other registry (其他注册表),然后输入您的私有 Docker 映像的凭证的 ARN。凭证必须由 Secrets Manager 创建。有关更多信息,请参阅 。什么是Amazon Secrets Manager?中的Amazon Secrets Manager用户指南.

注意

CodeBuild 覆盖ENTRYPOINT中的 Docker 镜像。

Privileged

(可选)选择Privileged仅当您计划使用此构建项目来构建 Docker 映像,并且您选择的构建环境映像不是由具有 Docker 支持的 CodeBuild 提供时,才会使用此构建项目来构建 Docker 映像。否则,尝试与 Docker 守护程序交互的所有关联的构建都将失败。您还必须启动 Docker 守护程序,以便您的构建与其交互。执行此操作的一种方法是通过运行以下构建命令在您的构建规范的 install 阶段初始化 Docker 守护程序。如果您选择了由具有 Docker 支持的 CodeBuild 提供的构建环境映像,请不要运行这些命令。

注意

默认情况下,Docker 容器不允许访问任何设备。特权模式将授予构建项目的 Docker 容器访问所有设备的权限。有关更多信息,请参阅 Docker 文档网站上的运行时权限和 Linux 功能

- 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"
服务角色

请执行下列操作之一:

  • 如果您没有 CodeBuild 服务角色,请选择。新服务角色. 在 Role name 中,为新角色输入名称。

  • 如果您有 CodeBuild 服务角色,请选择现有服务角色. In角色 ARN中,请选择服务角色。

注意

当您使用控制台来创建构建项目时,您可以同时创建 CodeBuild 服务角色。默认情况下,这个角色仅能与该构建项目配合使用。如果您使用控制台将此服务角色与另一个构建项目关联,则此角色将更新以便与关联的构建项目结合使用。一个服务角色最多可与 10 个构建项目结合使用。

其他配置
Timeout

指定 5 到 8 个小时之间的一个值,在此时间后,如果构建未完成,CodeBuild 会将其停止。如果 hoursminutes 都留空,则将使用 60 分钟的默认值。

VPC

如果要将 CodeBuild 与您的 VPC 结合使用,请执行以下操作:

  • 适用于VPC下,选择 CodeBuild 使用的 VPC ID。

  • 适用于VPC 子网中,选择包含 CodeBuild 使用的资源的子网。

  • 适用于VPC 安全组中,选择 CodeBuild 用来支持对 VPC 中资源的访问的安全组。

有关更多信息,请参阅使用Amazon CodeBuild借助 Amazon Virtual Private Cloud

计算

选择下列可用选项之一。

环境变量

输入名称和值,然后选择每个环境变量的类型以供构建使用。

注意

CodeBuild 会为您的Amazon自动区域。如果您尚未将以下环境变量添加到 buildspec.yml 中,则必须设置这些变量:

  • AWS_ACCOUNT_ID

  • IMAGE_REPO_NAME

  • IMAGE_TAG

控制台和 Amazon CLI 用户可以查看环境变量。如果您不担心环境变量的可见性,请设置 NameValue 字段,然后将 Type 设置为 Plaintext

我们建议您将具有敏感值(例如Amazon访问密钥 ID,Amazon私有访问密钥或密码作为 Amazon EC2 Systems Manager Parameter Store 中的参数,或Amazon Secrets Manager.

如果您使用 Amazon EC2 Systems Manager Parameter Store,那么对于类型中,选择参数. 适用于名称中,输入标识符供引用。适用于中,输入存储在 Amazon EC2 Systems Manager Parameter Store 中的参数名称。使用名为 /CodeBuild/dockerLoginPassword 的参数作为示例,对于 Type (类型),选择 Parameter (参数)。对于名称,请输入 LOGIN_PASSWORD。在 Value(值)中输入 /CodeBuild/dockerLoginPassword

重要

如果您使用 Amazon EC2 Systems Manager Parameter Store,我们建议您使用以开头的参数名称来存储参数。/CodeBuild/(例如,/CodeBuild/dockerLoginPassword)。您可以使用 CodeBuild 控制台在 Amazon EC2 Systems Manager Parameter Manager Parameter 中创建参数。选择 Create parameter (创建参数),然后按照对话框中的说明操作。(在该对话框中,对于KMS 密钥中,您可以指定Amazon KMS密钥。 Amazon EC2 Systems Manager 使用此密钥在存储过程中加密参数的值并在检索过程中解密参数的值。) 如果您使用 CodeBuild 控制台创建参数,控制台将以/CodeBuild/,因为它正在存储。有关更多信息,请参阅 。Systems Manager Parameter StoreSystems Manager Parameter Store 控制台演练中的Amazon EC2 Systems Manager 用户指南.

如果您的构建项目引用了 Amazon EC2 Systems Manager Parameter Store 中存储的参数,则构建项目的服务角色必须允许ssm:GetParametersaction. 如果您选择了新服务角色之前,CodeBuild 将在您的构建项目的默认服务角色中包含此操作。但是,如果您选择了 Existing service role (现有服务角色),必须单独将此操作添加到您的服务角色中。

如果您的构建项目引用了 Amazon EC2 Systems Manager Parameter Store 中存储的但参数名称不以开头的参数,/CodeBuild/,并且您选择了新服务角色,则必须更新该服务角色以允许访问不以/CodeBuild/. 这是因为该服务角色仅允许访问以 /CodeBuild/ 开头的参数名称。

如果选择。新服务角色,该服务角色将拥有解密下的所有参数的权限。/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_ 打头的名称设置任何环境变量。此前缀是专为内部使用预留的。

如果具有相同名称的环境变量在多处都有定义,则应按照如下方式确定其值:

  • 构建操作调用开始时的值优先级最高。

  • 构建项目定义中的值优先级次之。

  • 构建规范声明中的值优先级最低。

如果您使用 Secrets Manager,则对于类型中,选择Secrets Manager. 适用于名称中,输入标识符供引用。对于 Value (值),请使用模式 secret-id:json-key:version-stage:version-id 输入 reference-key。有关信息,请参阅 Secrets Manager reference-key in the buildspec file

重要

如果您使用 SSecrets Manager,我们建议您使用以开头的名称来存储密钥。/CodeBuild/(例如,/CodeBuild/dockerLoginPassword)。有关更多信息,请参阅 。什么是Amazon Secrets Manager?中的Amazon Secrets Manager用户指南.

如果您的构建项目引用了 Secret Manager 中存储的密钥,则构建项目的服务角色必须允许secretsmanager:GetSecretValueaction. 如果您选择了新服务角色之前,CodeBuild 将在您的构建项目的默认服务角色中包含此操作。但是,如果您选择了 Existing service role (现有服务角色),必须单独将此操作添加到您的服务角色中。

如果您的构建项目引用了存储在 Secrets Manager 中的密钥,其密码名称不以/CodeBuild/,并且您选择了新服务角色,则必须更新服务角色以允许访问不以/CodeBuild/. 这是因为该服务角色仅允许访问以/CodeBuild/.

如果选择新服务角色,服务角色包含解密/CodeBuild/命名空间。

Buildspec

构建规范

请执行下列操作之一:

  • 如果您的源代码包括生成规范文件,请选择 Use a buildspec file (使用 buildspec 文件)。默认情况下,CodeBuild 会查找名为buildspec.yml源代码根目录中。如果您的构建规范文件使用不同的名称或位置,请在Buildspec name (构建规范名称)(例如,buildspec-two.yml或者configuration/buildspec.yml. 如果构建规范文件位于 S3 存储桶中,则该文件必须位于同一存储桶中。Amazon作为构建项目的区域。 使用其 ARN 指定构建规范文件(例如,arn:aws:s3:::my-codebuild-sample2/buildspec.yml)。

  • 如果您的源代码不包括构建规范文件,或者如果您要从在源代码根目录的 buildspec.yml 文件中为 build 阶段指定的一个构建规范文件中运行构建命令,则选择 Insert build commands (插入构建命令)。对于 Build commands (构建命令),请输入您要在 build 阶段运行的命令。对于多个命令,使用 && 分开各个命令 (例如 mvn test && mvn package)。要在其他阶段运行命令,或者如果您有build阶段,添加buildspec.yml文件添加到源代码根目录,将命令添加到文件中,然后选择使用源代码根目录中的构建规范 .yml.

有关更多信息,请参阅 构建规范参考

Batch 配置

您可以将一组构建作为单个操作运行。有关更多信息,请参阅Batch 生成Amazon CodeBuild

定义批处理配置

选择该选项可允许在此项目中批量生成。

Batch 服务角色

提供批量生成的服务角色。

选择以下选项之一:

  • 如果您没有批量服务角色,请选择新服务角色. In服务角色中,输入新角色的名称。

  • 如果您有批处理服务角色,请选择 Create of现有服务角色. In服务角色中,请选择服务角色。

Batch 构建在批处理配置中引入了新的安全角色。这个新角色是必需的,因为 CodeBuild 必须能够调用StartBuildStopBuild, 和RetryBuild操作,以便作为批处理的一部分运行构建。客户应使用新角色,而不是使用他们在构建中使用的角色,原因有两个:

  • 授予构建角色StartBuildStopBuild, 和RetryBuild权限将允许单个构建通过 buildspec 启动更多构建。

  • CodeBuild 批量生成提供限制,限制可用于批处理中生成的生成和计算类型的数量。如果构建角色具有这些权限,则构建本身可能会绕过这些限制。

允许的批处理计算类型

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

批量允许的最大版本

输入批处理允许的最大构建数。如果批次超过此限制,批处理将失败。

批处理超时

输入批构建完成的最长时间。

组合构件

Select将批次中的所有工件合并到单个位置将批次中的所有对象合并到一个位置。

Artifacts

类型

请执行下列操作之一:

  • 如果您不想创建任何构建输出构件,请选择 No artifacts (无构件)。如果您只运行构建测试,或者您要将 Docker 镜像推送到 Amazon ECR 存储库,建议执行此操作。

  • 要在 S3 存储桶中存储生成输出,请选择Amazon S3中,然后执行以下操作:

    • 如果要将项目名称用于构建输出 ZIP 文件或文件夹,请将 Name (名称) 留空。否则,请输入名称。(如果您要输出 ZIP 文件,并且要让 ZIP 文件包含文件扩展名,请务必在 ZIP 文件名之后添加扩展名。)

    • 如果希望构建规范文件中指定的名称覆盖控制台中指定的任何名称,请选择 Enable semantic versioning (启用语义版本控制)。构建规范文件中的名称是构建时计算得出的,使用 Shell 命令语言。例如,您可以将日期和时间附加到您的项目名称后面,以便它始终是唯一的。构件名称唯一防止覆盖构件。有关更多信息,请参阅构建规范语法

    • 对于 Bucket name (存储桶名称),请选择输出存储桶的名称。

    • 如果您在此过程的前面部分选择了 Insert build commands (插入构建命令),那么对于 Output files (输出文件),请输入构建(该构建要放到构建输出 ZIP 文件或文件夹中)中的文件位置。对于多个位置,使用逗号分开各个位置 (appspec.yml, target/my-app.jar)。有关更多信息,请参阅 构建规范语法files 的描述。

    • 如果不想加密构建构件,请选择 Remove artifacts encryption (删除构件加密)

对于所需的每个辅助构件集:

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

  2. 选择 Add artifact (添加构件)

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

  4. 选择 Save artifact (保存构件)

其他配置
加密密钥

(可选)执行以下操作之一:

  • 使用Amazon对您的账户中适用于 Amazon S3 的托管客户托管密钥 (CMK) 加密构建输出项目,请将留下加密密钥空白。这是默认模式。

  • 要使用客户托管 CMK 加密生成输出项目,请在 Encryption key (加密密钥) 中输入 CMK 的 ARN。采用格式 arn:aws:kms:region-ID:account-ID:key/key-ID

缓存类型

对于 Cache type (缓存类型),请选择下列选项之一:

  • 如果您不想使用缓存,请选择 No cache (无缓存)

  • 如果要使用 Amazon S3 缓存,请选择Amazon S3中,然后执行以下操作:

    • 对于 Bucket (存储桶),选择存储缓存的 S3 存储桶的名称。

    • (可选)用于缓存路径前缀中,输入 Amazon S3 路径前缀。Cache path prefix (缓存路径前缀)值类似于目录名称。它使您能够在存储桶的同一目录下存储缓存。

      重要

      请勿将一个尾斜杆 (/) 附加到路径前缀后面。

  • 如果想要使用本地缓存,请选择 Local (本地),然后选择一个或多个本地缓存模式。

    注意

    Docker 层缓存模式仅适用于 Linux。如果您选择该模式,您的项目必须在特权模式下运行。这些区域有:ARM_CONTAINERLINUX_GPU_CONTAINER环境类型和BUILD_GENERAL1_2XLARGE计算类型不支持使用本地缓存。

使用缓存可节省大量构建时间,因为构建环境的可重用部分被存储在缓存中,并且可跨构建使用。有关在构建规范文件中指定缓存的信息,请参阅构建规范语法。有关缓存的更多信息,请参阅在 Amazon CodeBuild 中构建缓存

Logs

选择要创建的日志。您可以创建 Amazon CloudWatch Logs 和 Amazon S3 日志。

CloudWatch

如果您需要 Amazon CloudWatch Logs 记录:

CloudWatch 日志

SelectCloudWatch 日志.

Group name

输入您的 Amazon CloudWatch Logs 日志组的名称。

流名称

输入您的 Amazon CloudWatch Logs 日志流名称。

S3

如果您希望 Amazon S3 日志:

S3 日志

选择 S3 logs (S3 日志)

存储桶

选择您的日志所用的 S3 存储桶的名称。

Path prefix

输入您的日志的前缀。

禁用 S3 日志加密

如果您不希望加密 S3 日志,请选择。