本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在中更改构建项目设置 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 映像,请选择自定义映像。对于环境类型,请选择 Linux ARMGPU、Linux 或 Windows。如果选择 “其他注册表”,则在 “外部注册表” 中URL,使用格式输入 Docker Hub 中 Docker 镜像的名称和标签。
如果您选择亚马逊 ECR,请使用亚马逊ECR存储库和亚马逊ECR镜像在您的 AWS 账户中选择 Docker 镜像。docker repository
/docker image name
-
要使用私有 Docker 映像,请选择自定义映像。对于环境类型,请选择 Linux ARMGPU、Linux 或 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 支持的构建环境镜像,请不要运行这些命令。注意
默认情况下,为非版本启用 Docker 守护程序。VPC如果你想使用 Docker 容器进行VPC构建,请参阅 Docker Docs 网站上的运行时权限和 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 参数存储和 Sy EC2 stems 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-id
reference-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 文件。默认情况下,在源代码根目录
buildspec.yml
中 CodeBuild查找名为的文件。如果您的 buildspec 文件使用不同的名称或位置,请在 Buildspec 名称中输入其从源根目录开始的路径(例如,buildspec-two.yml
或。configuration/buildspec.yml
如果 buildspec 文件位于 S3 存储桶中,则该文件必须与您的构建项目位于同一 AWS 区域。 使用其指定 buildspec 文件ARN(例如arn:aws:s3:::
)。<my-codebuild-sample2>
/buildspec.yml -
如果您的源代码不包括 buildspec 文件,或者如果您要运行的构建命令不是在源代码根目录的
buildspec.yml
文件中为build
阶段指定的构建命令,则选择插入构建命令。对于构建命令,请输入您要在build
阶段运行的命令。对于多个命令,使用&&
分开各个命令(例如mvn test && mvn package
)。要在其他阶段运行命令,或者,如果build
阶段对应的命令列表特别长,请将buildspec.yml
文件添加到源代码根目录,将命令添加到该文件中,然后选择在源代码根目录中使用 buildspec.yml。
有关更多信息,请参阅 Buildspec 参考。
-
批量配置
在批量配置部分,选择编辑。完成更改后,请选择更新配置,以保存新的配置。有关更多信息,请参阅 批量运行构建。
您可以修改以下属性:
- 批量服务角色
-
为批量构建提供服务角色。
选择以下操作之一:
-
如果您没有批量服务角色,请选择新建服务角色。在服务角色中,为新角色输入名称。
-
如果您拥有批量服务角色,请选择现有服务角色。在服务角色中,选择对应的服务角色。
批量构建为批量配置引入了全新的安全角色。这个新角色是必需的,因为 CodeBuild 必须能够代表你调用
StartBuild
StopBuild
、和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 日志。
- 组名
-
输入您的 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/amazonlinux2-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)。
按照中所述修改更新JSON文件创建构建项目 (AWS CLI),然后保存结果。修改完更新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 开发工具包和工具参考。