本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在中更改构建项目设置 AWS CodeBuild
您可以使用 AWS CodeBuild 控制台 AWS CLI、或 AWS SDKs 来更改构建项目的设置。
如果您将测试报告添加到构建项目,请确保您的 IAM 角色具有测试报告权限中介绍的权限。
更改构建项目的设置(控制台)
要更改构建项目的设置,请执行以下过程:
在 https://console.aws.amazon.com/codesuite/codebuild
/home 中打开 AWS CodeBuild 控制台。 -
在导航窗格中,选择构建项目。
-
请执行以下操作之一:
-
选择要更改的构建项目的链接,然后选择构建详细信息。
-
选择要更改的构建项目旁边的按钮,选择查看详细信息,然后选择构建详细信息。
-
您可以修改以下部分:
项目配置
在项目配置部分,选择编辑。完成更改后,请选择更新配置,以保存新的配置。
您可以修改以下属性。
- 描述
-
输入构建项目的可选描述,以帮助其他用户了解此项目的用途。
- 构建徽章
-
选择启用构建徽章,以使您的项目的构建状态可见且可嵌入。有关更多信息,请参阅 构建徽章示例。
注意
如果您的源提供商是 Amazon S3,则构建徽章不适用。
- 启用并发构建限制
-
如果要限制此项目的并发构建数量,请执行以下步骤:
-
选择限制此项目可以启动的并发构建数量。
-
在并发构建限制中,输入此项目允许的并发构建的最大数量。此限制不得大于为该账户设置的并发构建限制。如果您尝试输入大于账户限制的数字,则会显示错误消息。
仅当当前构建数量小于或等于此限值时,才会启动新构建。如果当前构建计数达到此限值,则新构建将受到限制且不会运行。
-
- 启用公共构建访问权限
-
要向公众(包括无法访问 AWS 账户的用户)公开项目的生成结果,请选择 “启用公共生成访问权限”,并确认您要公开生成结果。以下属性用于公共构建项目:
- 公共构建服务角色
-
如果您想为您 CodeBuild 创建新的服务角色,请选择新服务角色;如果要使用现有的服务角色,请选择现有服务角色。
公共生成服务角色 CodeBuild 允许读取 CloudWatch 日志并下载项目构建的 Amazon S3 工件。您必须执行此操作,才能向公众提供项目的构建日志和构件。
- 服务角色
-
输入新的服务角色名称或现有服务角色名称。
要将项目的构建结果设为私有,请清除启用公共构建访问权限。
有关更多信息,请参阅 获取公共构建项目 URLs。
警告
在公开项目的构建结果时,应记住以下几点:
-
项目的所有构建结果、日志和构件,包括项目为私有状态时运行的构建,都可向公众开放。
-
所有构建日志和构件都向公众开放。环境变量、源代码和其他敏感信息可能已输出到构建日志和构件中。您必须谨慎筛选将哪些信息输出到构建日志。以下是一些最佳实操:
-
不要在环境变量中存储敏感值,尤其是 AWS 访问密钥 IDs 和私有访问密钥。我们建议您使用 Amazon S EC2 ystems Manager 参数存储库或 AWS Secrets Manager 存储敏感值。
-
请按照使用 Webhook 的最佳实操对哪些实体可以触发构建进行限制且不要将 buildspec 存储在项目本身中,以尽可能确保您的 webhook 安全无虞。
-
-
恶意用户可以使用公共构建分发恶意构件。我们建议项目管理员查看所有拉取请求,验证拉取请求是否为合法更改。我们还建议您使用校验和验证所有构件,确保下载的构件正确无误。
- 其他信息
-
在标签中,输入您希望支持 AWS 服务使用的任何标签的名称和值。使用添加行添加标签。最多可以添加 50 个标签。
来源
在源部分中,请选择编辑。完成更改后,请选择更新配置,以保存新的配置。
您可以修改以下属性:
- 源提供商
-
选择源代码提供商类型。使用以下列表为您的源提供商选择适当的选项:
注意
CodeBuild 不支持 Bitbucket 服务器。
环境
在环境部分中,选择编辑。完成更改后,请选择更新配置,以保存新的配置。
您可以修改以下属性:
- 预置模型
-
要更改预置模型,请选择更改预置模型并执行下列操作之一:
-
要使用由管理的按需队列 AWS CodeBuild,请选择按需。使用按需队列,为您的构建 CodeBuild 提供计算。构建完成后,计算机就会被销毁。按需实例集是完全托管式的,并包括自动扩展功能以应对需求激增。
-
要使用由管理的预留容量队列 AWS CodeBuild,请选择预留容量,然后选择队列名称。使用预留容量实例集,您可以为构建环境配置一组专用实例。这些计算机保持闲置状态,可以立即处理生成或测试,并缩短构建持续时间。使用预留容量实例集,您的计算机将始终处于运行状态,并且只要预调配完毕,它们就会继续产生成本。
有关信息,请参阅在预留容量实例集上运行构建。
-
- 环境映像
-
要更改构建映像,请选择覆盖映像,然后执行以下操作之一:
-
要使用由管理的 Docker 映像 AWS CodeBuild,请选择托管映像,然后从 “操作系统”、“运行时”、“映像” 和 “映像版本” 中进行选择。从环境类型中进行选择(如果可用)。
-
要使用其他 Docker 映像,请选择自定义映像。对于环境类型,请选择 ARM、Linux、Linux GPU 或 Windows。如果您针对外部注册表 URL 选择其他注册表,请使用
格式在 Docker Hub 中输入 Docker 映像的名称和标签。如果您选择 Amazon ECR,请使用亚马逊 ECR 存储库和 A mazon ECR 镜像在您的账户中选择 Docker 镜像。 AWSdocker repository/docker image name -
要使用私有 Docker 映像,请选择自定义映像。对于环境类型,请选择 ARM、Linux、Linux GPU 或 Windows。对于映像注册表,选择其他注册表,然后输入您的私有 Docker 映像的凭证的 ARN。凭证必须由 Secrets Manager 创建。有关更多信息,请参阅《AWS Secrets Manager 用户指南》中的什么是 AWS Secrets Manager?。
注意
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 功能
并启用特权模式。此外,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 配合使用。
-
- 计算
-
请选择可用选项之一。
- 注册表凭证
-
使用非私有注册表映像配置项目时,请指定注册表凭据。
注意
只有当图像被私有注册库中的镜像覆盖时,才会使用此凭证。
- 环境变量
-
请输入每个环境变量的名称和值,然后选择类型,以供构建使用。
注意
CodeBuild 自动为您的 AWS 地区设置环境变量。如果您尚未将以下环境变量添加到 buildspec.yml 中,则必须设置这些变量:
-
AWS_ACCOUNT_ID
-
IMAGE_REPO_NAME
-
IMAGE_TAG
控制台和 AWS CLI 用户可以看到环境变量。如果您不担心环境变量的可见性,请设置名称和值字段,然后将类型设置为明文。
我们建议您将具有敏感值的环境变量(例如访问密钥 ID、私有 AWS 访问 AWS 密钥或密码)作为参数存储在 Amazon Sy EC2 stems Manager Parameter Store 或 AWS Secrets Manager。
如果您使用 Amazon EC2 Systems Manager 参数存储,则在 “类型” 中选择 “参数”。在名称中,输入 CodeBuild 要引用的标识符。对于值,输入存储在 Amazon Sy EC2 stems Manager 参数存储中的参数名称。使用名为
/CodeBuild/dockerLoginPassword的参数作为示例,对于类型,选择参数。对于名称,请输入LOGIN_PASSWORD。对于值,请输入/CodeBuild/dockerLoginPassword。重要
如果您使用 Amazon EC2 Systems Manager Parameter Store,我们建议您存储参数名称以
/CodeBuild/(例如/CodeBuild/dockerLoginPassword)开头的参数。您可以使用 CodeBuild 控制台在 Amazon S EC2 ystems Manager 中创建参数。选择创建参数,然后按照对话框中的说明操作。(在该对话框中,对于 KMS 密钥,您可以指定账户中 AWS KMS 密钥的 ARN。 Amazon Sy EC2 stems Manager 使用此密钥在存储期间加密参数的值,并在检索期间对其进行解密。) 如果您使用 CodeBuild 控制台创建参数,则控制台会将参数名称的存储方式/CodeBuild/作为参数名称的开头。有关更多信息,请参阅亚马逊 Systems Manager 用户指南中的 Systems Manager 参数存储和 S EC2 ystems Manager 参数存储控制台演练。如果您的构建项目引用存储在 Amazon S EC2 ystems Manager Parameter Store 中的参数,则构建项目的服务角色必须允许该
ssm:GetParameters操作。如果您之前选择了 “新建服务角色”,请将此操作 CodeBuild 包含在构建项目的默认服务角色中。但是,如果您选择了现有服务角色,必须单独将此操作添加到您的服务角色中。如果您的构建项目引用了存储在 Amazon S EC2 ystems Manager Parameter Store 中且参数名称不是以开头的参数,并且您选择了新服务角色,则必须更新该服务角色以允许访问不以开头的参数名称
/CodeBuild/。/CodeBuild/这是因为该服务角色仅允许访问以/CodeBuild/开头的参数名称。如果您选择 “新建服务角色”,则该服务角色包括解密 Amazon Sy EC2 stems Manager 参数存储中
/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-idreference-key。有关信息,请参阅 Secrets Manager reference-key in the buildspec file。重要
如果您使用 Secrets Manager,我们建议您存储名称以
/CodeBuild/(例如/CodeBuild/dockerLoginPassword)开头的密钥。有关更多信息,请参阅《AWS Secrets Manager 用户指南》中的什么是 AWS Secrets Manager?。如果您的构建项目引用了 Secrets Manager 中存储的密钥,则构建项目的服务角色必须允许
secretsmanager:GetSecretValue操作。如果您之前选择了 “新建服务角色”,请将此操作 CodeBuild 包含在构建项目的默认服务角色中。但是,如果您选择了现有服务角色,必须单独将此操作添加到您的服务角色中。如果您的构建项目引用了 Secrets Manager 中存储的但密钥名称不以
/CodeBuild/开头的密钥,且您选择了新建服务角色,您必须更新该服务角色以允许访问不以/CodeBuild/开头的密钥名称。这是因为该服务角色仅允许访问以/CodeBuild/开头的密钥名称。如果您选择新建服务角色,该服务角色将拥有解密 Secrets Manager 中
/CodeBuild/命名空间下的所有密钥的权限。 -
Buildspec
在 Buildspec 部分,选择编辑。完成更改后,请选择更新配置,以保存新的配置。
您可以修改以下属性:
- 构建规范
-
请执行以下操作之一:
-
如果您的源代码包含 buildspec 文件,请选择使用 buildspec 文件。默认情况下, CodeBuild 在源代码根目录中查找名为
buildspec.yml的文件。如果您的 buildspec 文件使用其他名称或位置,请在 Buildspec 名称中输入其从源根目录开始的路径(例如,buildspec-two.yml或configuration/buildspec.yml。如果 buildspec 文件位于 S3 存储桶中,则该存储桶必须位于您的构建项目所在的同一 AWS 区域中。使用 ARN(例如arn:aws:s3:::)指定该 buildspec 文件。<my-codebuild-sample2>/buildspec.yml -
如果您的源代码不包括 buildspec 文件,或者如果您要运行的构建命令不是在源代码根目录的
buildspec.yml文件中为build阶段指定的构建命令,则选择插入构建命令。对于构建命令,请输入您要在build阶段运行的命令。对于多个命令,使用&&分开各个命令(例如mvn test && mvn package)。要在其他阶段运行命令,或者,如果build阶段对应的命令列表特别长,请将buildspec.yml文件添加到源代码根目录,将命令添加到该文件中,然后选择在源代码根目录中使用 buildspec.yml。
有关更多信息,请参阅 Buildspec 参考。
-
批量配置
在批量配置部分,选择编辑。完成更改后,请选择更新配置,以保存新的配置。有关更多信息,请参阅 批量运行构建。
您可以修改以下属性:
- 批量服务角色
-
为批量构建提供服务角色。
选择下列选项之一:
-
如果您没有批量服务角色,请选择新建服务角色。在服务角色中,为新角色输入名称。
-
如果您拥有批量服务角色,请选择现有服务角色。在服务角色中,选择对应的服务角色。
批量构建为批量配置引入了全新的安全角色。这个新角色是必需的,因为 CodeBuild 必须能够代表你调用
StartBuildStopBuild、和RetryBuild操作才能将生成作为批处理的一部分运行。客户应该使用新角色,而不是他们在构建中使用的角色,原因有两个:-
向构建角色授予
StartBuild、StopBuild和RetryBuild权限后,将允许单个构建通过 buildspec 启动多个构建。 -
CodeBuild 批处理生成提供了限制,限制了可用于批次构建的生成数量和计算类型。如果构建角色拥有这些权限,则构建本身就有可能绕过这些限制。
-
- 批处理允许的计算类型
-
选择批处理允许的计算类型。选择所有适用的选项。
- 允许批量使用的舰队
-
选择该批次允许的舰队。选择所有适用的选项。
- 批处理允许的最大构建数量
-
输入批处理允许的最大构建数量。如果批处理超过此限制,则会失败。
- 批处理超时
-
输入完成批量构建能够使用的最长时间。
- 合并构件
-
选择将批处理中的所有构件合并到一个位置,将批处理中的所有构件合并到一个位置。
- 批量报告模式
-
为批量构建选择所需的构建状态报告模式。
注意
仅当项目源为 Bitbucket 或 E GitHub nterprise 时,此字段才可用,并且在 “来源” 下选择了生成开始和完成时向源提供商报告构建状态。 GitHub
- 聚合构建
-
选择该选项,可将批处理中所有构建的状态合并到一个状态报告中。
- 单个构建
-
选择该选项,可分别报告批处理中所有构建的构建状态。
构件
在构件部分中,选择编辑。完成更改后,请选择更新配置,以保存新的配置。
您可以修改以下属性:
- 类型
-
请执行以下操作之一:
-
如果您不想创建任何构建输出构件,请选择无构件。如果您只运行构建测试,或者您要将 Docker 映像推送到 Amazon ECR 存储库,建议执行此操作。
-
要将构建输出存储在 S3 存储桶中,请选择 Amazon S3,然后执行以下操作:
-
如果要将项目名称用于构建输出 ZIP 文件或文件夹,请将名称留空。否则,请输入名称。(如果您要输出 ZIP 文件,并且要让 ZIP 文件包含文件扩展名,请务必在 ZIP 文件名之后添加扩展名。)
-
如果希望构建规范文件中指定的名称覆盖控制台中指定的任何名称,请选择启用语义版本控制。buildspec 文件中的名称是构建时计算得出的,使用 Shell 命令语言。例如,您可以将日期和时间附加到您的构件名称后面,以便确保其唯一性。为构件提供唯一名称可防止其被覆盖。有关更多信息,请参阅buildspec 语法。
-
对于存储桶名称,请选择输出存储桶的名称。
-
如果您在此过程的前面部分选择了插入构建命令,那么对于输出文件,请输入构建(该构建要放到构建输出 ZIP 文件或文件夹中)中的文件位置。对于多个位置,使用逗号将各个位置隔开(例如,
appspec.yml, target/my-app.jar)。有关更多信息,请参阅buildspec 语法中files的描述。 -
如果不想加密构建构件,请选择删除构件加密。
-
对于所需的每个辅助构件集:
-
对于构件标识符,输入少于 128 个字符且仅包含字母数字字符和下划线的值。
-
选择添加构件。
-
按照前面步骤的说明配置辅助构件。
-
选择保存构件。
-
- 其他配置
-
- 加密密钥
-
请执行以下操作之一:
-
要使用您账户中的 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 语法。有关缓存的更多信息,请参阅 缓存构建以提高性能。
-
日志
在标签部分中,选择编辑。完成更改后,请选择更新配置,以保存新的配置。
您可以修改以下属性:
选择要创建的日志。您可以创建 Amazon CloudWatch 日志、Amazon S3 日志或两者兼而有之。
- CloudWatch
-
如果你想要 Amazon CloudWatch Logs 日志:
- CloudWatch 日志
-
选择 CloudWatch logs (CloudWatch 日志)。
- 组名
-
输入您的 Amazon CloudWatch 日志组的名称。
- 流名称
-
输入您的 Amazon CloudWatch 日志流名称。
- S3
-
如果要创建 Amazon S3 日志:
- S3 日志
-
选择 S3 日志。
- 存储桶
-
选择您的日志的 S3 存储桶的名称。
- 路径前缀
-
输入日志的前缀。
- 禁用 S3 日志加密
-
如果您不希望加密您的 S3 日志,请选择此选项。
更改构建项目的设置 (AWS CLI)
有关 AWS CLI 搭配使用的信息 AWS CodeBuild,请参阅命令行参考。
要使用更新 CodeBuild 项目 AWS CLI,请使用更新后的属性创建一个 JSON 文件并将该文件传递给update-project命令。更新文件中未包含的所有属性保持不变。
在更新 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" } }
如果需要获取项目的当前属性值,请使用 batch-get-projects 命令获取正在修改的项目的当前属性,然后将输出写入到文件。
aws codebuild batch-get-projects --names "<project-name>" >project-info.json
该project-info.json文件包含一组项目,因此不能直接用于更新项目。但是,您可以从project-info.json文件中复制要修改的属性,然后将其粘贴到更新文件中,作为要修改的属性的基准。有关更多信息,请参阅 查看构建项目的详细信息 (AWS CLI)。
按照 创建构建项目 (AWS CLI) 中所述修改更新 JSON 文件,然后保存结果。修改更新 JSON 文件后,请运行 update-project 命令,传递更新 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)
有关 AWS CodeBuild 与一起使用的信息 AWS SDKs,请参阅AWS SDKs 和工具参考。