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

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

创建构建项目 (Amazon CLI)

有关Amazon CLI搭配使用的更多信息 CodeBuild,请参阅命令行参考

要使用创建 CodeBuild 生成项目Amazon CLI,请创建 JSON 格式的项目结构,填写该结构,然后调用create-project命令来创建项目。

创建 JSON 文件

利用 create-project 命令和 --generate-cli-skeleton 选项创建骨架 JSON 文件:

aws codebuild create-project --generate-cli-skeleton > <json-file>

这将创建 JSON 文件,其路径和文件名由 <json-file> 指定。

填写 JSON 文件

按照下面所示修改 JSON 数据,并保存您的结果。

{ "name": "<project-name>", "description": "<description>", "source": { "type": "CODECOMMIT" | "CODEPIPELINE" | "GITHUB" | "GITHUB_ENTERPRISE" | "BITBUCKET" | "S3" | "NO_SOURCE", "location": "<source-location>", "gitCloneDepth": "<git-clone-depth>", "buildspec": "<buildspec>", "InsecureSsl": "<insecure-ssl>", "reportBuildStatus": "<report-build-status>", "buildStatusConfig": { "context": "<context>", "targetUrl": "<target-url>" }, "gitSubmodulesConfig": { "fetchSubmodules": "<fetch-submodules>" }, "auth": { "type": "<auth-type>", "resource": "<auth-resource>" }, "sourceIdentifier": "<source-identifier>" }, "secondarySources": [ { "type": "CODECOMMIT" | "CODEPIPELINE" | "GITHUB" | "GITHUB_ENTERPRISE" | "BITBUCKET" | "S3" | "NO_SOURCE", "location": "<source-location>", "gitCloneDepth": "<git-clone-depth>", "buildspec": "<buildspec>", "InsecureSsl": "<insecure-ssl>", "reportBuildStatus": "<report-build-status>", "auth": { "type": "<auth-type>", "resource": "<auth-resource>" }, "sourceIdentifier": "<source-identifier>" } ], "secondarySourceVersions": [ { "sourceIdentifier": "<secondary-source-identifier>", "sourceVersion": "<secondary-source-version>" } ], "sourceVersion": "<source-version>", "artifacts": { "type": "CODEPIPELINE" | "S3" | "NO_ARTIFACTS", "location": "<artifacts-location>", "path": "<artifacts-path>", "namespaceType": "<artifacts-namespacetype>", "name": "<artifacts-name>", "overrideArtifactName": "<override-artifact-name>", "packaging": "<artifacts-packaging>" }, "secondaryArtifacts": [ { "type": "CODEPIPELINE" | "S3" | "NO_ARTIFACTS", "location": "<secondary-artifact-location>", "path": "<secondary-artifact-path>", "namespaceType": "<secondary-artifact-namespaceType>", "name": "<secondary-artifact-name>", "packaging": "<secondary-artifact-packaging>", "artifactIdentifier": "<secondary-artifact-identifier>" } ], "cache": { "type": "<cache-type>", "location": "<cache-location>", "mode": [ "<cache-mode>" ] }, "environment": { "type": "LINUX_CONTAINER" | "LINUX_GPU_CONTAINER" | "ARM_CONTAINER" | "WINDOWS_SERVER_2019_CONTAINER", "image": "<image>", "computeType": "BUILD_GENERAL1_SMALL" | "BUILD_GENERAL1_MEDIUM" | "BUILD_GENERAL1_LARGE" | "BUILD_GENERAL1_2XLARGE", "certificate": "<certificate>", "environmentVariables": [ { "name": "<environmentVariable-name>", "value": "<environmentVariable-value>", "type": "<environmentVariable-type>" } ], "registryCredential": [ { "credential": "<credential-arn-or-name>", "credentialProvider": "<credential-provider>" } ], "imagePullCredentialsType": "CODEBUILD" | "SERVICE_ROLE", "privilegedMode": "<privileged-mode>" }, "serviceRole": "<service-role>", "timeoutInMinutes": <timeout>, "queuedTimeoutInMinutes": <queued-timeout>, "encryptionKey": "<encryption-key>", "tags": [ { "key": "<tag-key>", "value": "<tag-value>" } ], "vpcConfig": { "securityGroupIds": [ "<security-group-id>" ], "subnets": [ "<subnet-id>" ], "vpcId": "<vpc-id>" }, "badgeEnabled": "<badge-enabled>", "logsConfig": { "cloudWatchLogs": { "status": "<cloudwatch-logs-status>", "groupName": "<group-name>", "streamName": "<stream-name>" }, "s3Logs": { "status": "<s3-logs-status>", "location": "<s3-logs-location>", "encryptionDisabled": "<s3-logs-encryption-disabled>" } }, "fileSystemLocations": [ { "type": "EFS", "location": "<EFS-DNS-name-1>:/<directory-path>", "mountPoint": "<mount-point>", "identifier": "<efs-identifier>", "mountOptions": "<efs-mount-options>" } ], "buildBatchConfig": { "serviceRole": "<batch-service-role>", "combineArtifacts": <combine-artifacts>, "restrictions": { "maximumBuildsAllowed": <max-builds>, "computeTypesAllowed": [ "<compute-type>" ] }, "timeoutInMins": <batch-timeout>, "batchReportMode": "REPORT_AGGREGATED_BATCH" | "REPORT_INDIVIDUAL_BUILDS" }, "concurrentBuildLimit": <concurrent-build-limit> }

替换以下内容:

name

必需。此构建项目的名称。此名称在您的 Amazon 账户的所有构建项目中必须是唯一的。

描述

可选。此构建项目的描述。

必需。一个ProjectSource对象,其中包含有关此构建项目的源代码设置的信息。添加 source 对象后,可以使用 secondarySources 额外添加多达 12 个源。这些设置包括:

source/type

必需。包含要构建的源代码的存储库的类型。有效值包括:

  • CODECOMMIT

  • CODEPIPELINE

  • GITHUB

  • GITHUB_ENTERPRISE

  • BITBUCKET

  • S3

  • NO_SOURCE

如果您使用 NO_SOURCE,则 buildspec 不能是一个文件,因为项目没有源。相反,您必须使用 buildspec 属性为 buildspec 指定 YAML 格式的字符串。有关更多信息,请参阅无源项目示例

source/location

必需(除非您将 <source-type> 设置为 CODEPIPELINE)。指定存储库类型的源代码的位置。

  • 对于 CodeCommit,指向包含源代码和 buildspec 文件的存储库的 HTTPS 克隆 URL(例如,https://git-codecommit.<region-id>.amazonaws.com/v1/repos/<repo-name>)。

  • 对于 Amazon S3,是构建输入存储桶的名称,后附包含源代码和 buildspec 的 ZIP 文件的路径和名称。例如:

    • 对于位于输入存储桶根目录的 ZIP 文件:<bucket-name>/<object-name>.zip

    • 对于位于输入存储桶子文件夹中的 ZIP 文件:<bucket-name>/<subfoler-path>/<object-name>.zip

  • 对于 GitHub,指向包含源代码和 buildspec 文件的存储库的 HTTPS 克隆 URL。该 URL 必须包含 github.com。您必须将您的Amazon账户关联到您的 GitHub 账户。为此,请使用 CodeBuild 控制台创建构建项目。

    1. 在 GitHub 授权应用程序页面的组织访问权限部分,选择您希望 CodeBuild 能够访问的每个存储库旁边的请求访问权限。

    2. 选择授权应用程序。(连接 GitHub 账户后,无需完成构建项目的创建。 您可以关闭 CodeBuild 控制台。)

  • 对于 GitHub 企业服务器,指向包含源代码和 buildspec 文件的存储库的 HTTP 或 HTTPS 克隆 URL。您还必须将您的Amazon帐户与您的 GitHub企业服务器帐户关联。为此,请使用 CodeBuild 控制台创建构建项目。

    1. 在 GitHub 企业服务器中创建个人访问令牌。

    2. 将此令牌复制到剪贴板,以便在创建 CodeBuild 项目时使用。有关更多信息,请参阅 GitHub 帮助网站上的为命令行创建个人访问令牌

    3. 使用控制台创建 CodeBuild 项目时,在源代码中,对于源提供商,选择GitHub企业

    4. 对于个人访问令牌,请粘贴已复制到剪贴板中的令牌。选择保存令牌。您的 CodeBuild 帐户现已连接到您的 GitHub 企业服务器帐户。

  • 对于 Bitbucket,则为指向包含源代码和 buildspec 文件的存储库的 HTTPS 克隆 URL。该 URL 必须包含 bitbucket.org。您还必须将您的 Amazon 账户连接到您的 Bitbucket 账户。为此,请使用 CodeBuild 控制台创建构建项目。

    1. 当您使用控制台与 Bitbucket 连接(或重新连接)时,在 Bitbucket 确认对账户的访问页面上,选择授予访问权限。(连接到 Bitbucket 账户后,无需完成构建项目的创建。 您可以关闭 CodeBuild 控制台。)

  • 对于Amazon CodePipeline,请不要为指定locationsource。 CodePipeline 忽略此值,因为在中创建管道时 CodePipeline,需要在管道的 “源” 阶段指定源代码位置。

来源/ gitCloneDepth

可选。要下载的历史记录深度。最小值为 0。如果此值为 0、大于 25 或未提供,则会下载每个构建项目的完整历史记录。如果您的源类型是 Amazon S3,则不支持此值。

source/buildspec

可选。要使用的构建规范定义或文件。如果此值未提供或设置为空字符串,源代码必须在其根目录中包含 buildspec.yml 文件。如果设置了该值,则它可以是内联 buildspec 定义,也可以是指向相对于主要源根目录的替代 buildspec 文件的路径,或者是指向 S3 存储桶的路径。存储桶必须与构建项目位于同一 Amazon 区域中。使用其 ARN 指定 buildspec 文件(例如,arn:aws:s3:::<my-codebuild-sample2>/buildspec.yml)。有关更多信息,请参阅 buildspec 文件名称和存储位置

source/auth

不使用。此对象仅供 CodeBuild 控制台使用。

来源/ reportBuildStatus

指定是否向源提供商发送构建的开始和完成状态。如果您使用除 GitHub 企业服务器或 Bitbucket 之外的 GitHub源提供商进行此设置,invalidInputException则会抛出。

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

来源/ buildStatusConfig

包含定义 CodeBuild 构建项目如何向源提供者报告构建状态的信息。此选项仅在源提供商为 GITHUBGITHUB_ENTERPRISEBITBUCKET 时使用。

来源/buildStatusConfig/上下文

对于 Bitbucket 源,此参数用于处于 Bitbucket 提交状态的 name 参数。对于 GitHub 源,此参数用于处于 GitHub 提交状态的context参数。

例如,您可以使用 CodeBuild环境变量让 con context tain 内部版本号和 webhook 触发器:

Amazon CodeBuild sample-project Build #$CODEBUILD_BUILD_NUMBER - $CODEBUILD_WEBHOOK_TRIGGER

这会导致由 webhook 拉取请求事件触发的 build #24 的上下文显示如下:

Amazon CodeBuild sample-project Build #24 - pr/8
source/buildStatusConfig/targetURL

对于 Bitbucket 源,此参数用于处于 Bitbucket 提交状态的 url 参数。对于 GitHub 源,此参数用于处于 GitHub 提交状态的target_url参数。

例如,您可以将 targetUrl 设置为 https://aws.amazon.com/codebuild/<path to build>,而提交状态将链接到此 URL。

您还可以在中包含 CodeBuild 环境变量,targetUrl以便向 URL 添加其他信息。例如,要将构建区域添加到此 URL,请将 targetUrl 设置为:

"targetUrl": "https://aws.amazon.com/codebuild/<path to build>?region=$AWS_REGION"

如果构建区域为 us-east-2,则会扩展为:

https://aws.amazon.com/codebuild/<path to build>?region=us-east-2
来源/ gitSubmodulesConfig

可选。有关 Git 子模块配置的信息。仅与 CodeCommit、 GitHub、 GitHub 企业服务器和 Bitbucket 一起使用。

源/gitSubmodulesConfig/fetchSubModules

如果您希望将 Git 子模块包含到存储库中,请将 fetchSubmodules 设置为 true。包含的 Git 子模块必须配置为 HTTPS。

来源/ InsecureSsl

可选。仅与 GitHub 企业服务器一起使用。将此值设置为,true以便在连接到 GitHub 企业服务器项目存储库时忽略 TLS 警告。默认值为 false。只应将 InsecureSsl 用于测试目的。它不应在生产环境中使用。

source/sourceIdentifier

用户定义的项目源标识符。对于主源来说,为可选项。对于辅助源,则为必选项。

secondarySources

可选。包含有关构建项目辅助源信息的ProjectSource对象数组。最多可以添加 12 个辅助源。这些 secondarySources 对象使用的属性与对象使用的属性相同。在辅助源对象中,sourceIdentifier 是必需项。

secondarySourceVersions

可选。ProjectSourceVersion 对象数组。如果在构建级别指定 secondarySourceVersions,则它们优先于此对象。

sourceVersion

可选。要为此项目构建的构建输入的版本。如果未指定,则使用最新版本。如果已指定,则它必须是下列项之一:

  • 对于 CodeCommit,要使用的提交 ID、分支或 Git 标签。

  • 对于 GitHub,与您要构建的源代码版本相对应的提交 ID、拉取请求 ID、分支名称或标签名称。如果指定了拉取请求 ID,则必须使用格式 pr/pull-request-ID(例如,pr/25)。如果指定了分支名称,则将使用分支的 HEAD 提交 ID。如果未指定,则使用默认分支的 HEAD 提交 ID。

  • 对于 Bitbucket,为提交 ID、分支名称或与您要构建的源代码版本相对应的标签名称。如果指定了分支名称,则将使用分支的 HEAD 提交 ID。如果未指定,则使用默认分支的 HEAD 提交 ID。

  • 对于 Amazon S3,为表示要使用的构建输入 ZIP 文件的对象的版本 ID。

如果在构建级别指定 sourceVersion,则该版本将优先于此 sourceVersion(在项目级别)。有关更多信息,请参阅 源版本示例,包含 Amazon CodeBuild

构件

必需。一个ProjectArtifacts对象,其中包含有关此构建项目的输出构件设置的信息。添加 artifacts 对象后,可以使用 secondaryArtifacts 额外添加最多 12 个构件。这些设置包括:

artifacts/type

必需。构建输出构件的类型。有效值为:

  • CODEPIPELINE

  • NO_ARTIFACTS

  • S3

artifacts/location

仅与 S3 构件类型一起使用。不用于其他构件类型。

您在先决条件中创建或标识的输出存储桶的名称。

artifacts/path

仅与 S3 构件类型一起使用。不用于其他构件类型。

放置 ZIP 文件或文件夹的输出存储桶的路径。如果未为指定值path,则 CodeBuild 使用namespaceType(如果已指定)和name来确定生成输出 ZIP 文件或文件夹的路径和名称。例如,如果您为 path 指定 MyPath,并为 name 指定 MyArtifact.zip,那么路径和名称将为 MyPath/MyArtifact.zip

artifacts/namespaceType

仅与 S3 构件类型一起使用。不用于其他构件类型。

构建输出 ZIP 文件或文件夹的命名空间。有效值包括 BUILD_IDNONE。使用 BUILD_ID 将构建 ID 插入到构建输出 ZIP 文件或文件夹的路径中。否则,请使用 NONE。如果未为指定值namespaceType,则 CodeBuild 使用path(如果已指定)和name来确定生成输出 ZIP 文件或文件夹的路径和名称。例如,如果您为 path 指定 MyPath,为 namespaceType 指定 BUILD_ID,并为 name 指定 MyArtifact.zip,那么路径和名称将为 MyPath/build-ID/MyArtifact.zip

artifacts/name

仅与 S3 构件类型一起使用。不用于其他构件类型。

location 中构建输出 ZIP 文件或文件夹的名称。例如,如果您为 path 指定 MyPath,并为 name 指定 MyArtifact.zip,那么路径和名称将为 MyPath/MyArtifact.zip

文物/ overrideArtifactName

仅与 S3 构件类型一起使用。不用于其他构件类型。

可选。如果设置为 true,在 buildspec 文件的 artifacts 块中指定的名称将覆盖 name。有关更多信息,请参阅的构建规范参考 CodeBuild

artifacts/packaging

仅与 S3 构件类型一起使用。不用于其他构件类型。

可选。指定如何打包构件。允许的值包括:

NONE

创建包含构建构件的文件夹。这是默认值。

ZIP

创建包含构建构件的 ZIP 文件。

secondaryArtifacts

可选。包含有关构建项目的次要构件设置信息的ProjectArtifacts对象数组。最多可以添加 12 个辅助构件。secondaryArtifacts 使用的许多设置与 构件 对象相同。

cache

必需。一个ProjectCache对象,其中包含有关此构建项目的缓存设置的信息。有关更多信息,请参阅构建缓存

environment

必需。一个ProjectEnvironment对象,其中包含有关此项目的构建环境设置的信息。这些设置包括:

environment/type

必需。构建环境的类型。有关更多信息,请参阅 CodeBuild API 参考中的键入

environment/image

必需。此构建环境使用的 Docker 映像标识符。通常,此标识符以 image-name:tag 的形式表示。例如,在 CodeBuild 用于管理其 Docker 镜像的 Docker 存储库中,可能就是这样。aws/codebuild/standard:5.0在 Docker Hub 中,为 maven:3.3.9-jdk-8。在 Amazon ECR 中,为 account-id.dkr.ecr.region-id.amazonaws.com/your-Amazon-ECR-repo-name:tag。有关更多信息,请参阅 提供的 Docker 镜像 CodeBuild

environment/computeType

必需。指定此构建环境使用的计算资源。有关更多信息,请参阅 API 参考中的计算类型。CodeBuild

environment/certificate

可选。Amazon S3 存储桶的 ARN、路径前缀和包含 PEM 编码证书的对象键。对象键可以仅为 .pem 文件,也可以为包含 PEM 编码的证书的 .zip 文件。例如,如果 Amazon S3 存储桶名称为 <my-bucket>,路径前缀为 <cert>,且对象键名称为 <certificate.pem>,则 certificate 可接受的格式为 <my-bucket/cert/certificate.pem>arn:aws:s3:::<my-bucket/cert/certificate.pem>

environment/environmentVariables

可选。包含要为此构建环境指定的环境变量的EnvironmentVariable对象数组。每个环境变量都表示为一个对象,其中包含 namevalue,以及 namevaluetype,还有 type

控制台和 Amazon CLI 用户可以查看所有环境变量。如果您不担心环境变量的可见性,请设置 namevalue,并将 type 设置为 PLAINTEXT

我们建议您将具有敏感值(例如 Amazon 访问密钥 ID、Amazon 秘密访问密钥或密码)的环境变量作为参数存储在 Amazon EC2 Systems Manager Parameter Store 或 Amazon Secrets Manager 中。对于name,为存储的参数设置标识符 CodeBuild 以供参考。

如果您使用 Amazon EC2 Systems Manager Parameter Store,针对 value,将参数名称设置为存储在 Parameter Store 中。将 type 设置为 PARAMETER_STORE。以名为 /CodeBuild/dockerLoginPassword 的参数为例,将 name 设置为 LOGIN_PASSWORD。将 value 设置为 /CodeBuild/dockerLoginPassword。将 type 设置为 PARAMETER_STORE

重要

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

如果您的构建项目引用了 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,针对 value,请将参数的名称设置为存储在 Secrets Manager 中。将 type 设置为 SECRETS_MANAGER。以名为 /CodeBuild/dockerLoginPassword 的密钥为例,将 name 设置为 LOGIN_PASSWORD。将 value 设置为 /CodeBuild/dockerLoginPassword。将 type 设置为 SECRETS_MANAGER

重要

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

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

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

如果您选择新建服务角色,该服务角色将拥有解密 Secrets Manager 中 /CodeBuild/ 命名空间下的所有密钥的权限。

environment/registryCredential

可选。一个RegistryCredential对象,它指定提供私有 Docker 注册表访问权限的凭据。

environment/registryCredential/credential

指定使用 Amazon Managed Services 创建的凭证的 ARN 或名称。仅当凭证存在于您当前的区域中时,您才能使用凭证的名称。

environment/registryCredential/credentialProvider

唯一有效值为 SECRETS_MANAGER

当设置此属性时:

  • imagePullCredentials 必须设置为 SERVICE_ROLE

  • 映像不能为辅助映像或 Amazon ECR 映像。

环境/ 类型 imagePullCredentials

可选。 CodeBuild 用于在版本中提取图像的凭据类型。有两个有效值:

CODEBUILD

CODEBUILD指定 CodeBuild 使用自己的凭证。您必须编辑 Amazon ECR 存储库策略才能信任 CodeBuild 服务委托人。

SERVICE_ROLE

指定 CodeBuild 使用您的构建项目的服务角色。

当您使用跨账户或私有注册表映像时,必须使用 SERVICE_ROLE 凭证。使用 CodeBuild 精选图片时,必须使用CODEBUILD凭据。

environment/privilegedMode

仅在使用此构建项目来构建 Docker 映像时,才设置为 true。否则,尝试与 Docker 守护程序交互的所有关联的构建都将失败。您还必须启动 Docker 守护程序,以便您的构建与其交互。执行此操作的一种方法是通过运行以下构建命令在您的 buildspec 文件的 install 阶段初始化 Docker 守护程序。如果您指定了由 CodeBuild Docker 支持的构建环境镜像,请不要运行这些命令。

注意

默认情况下,非 VPC 版本启用 Docker 守护程序。如果您想使用 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"

serviceRole

必需。服务角色的 ARN CodeBuild 用于代表用户与服务进行交互(例如,arn:aws:iam::account-id:role/role-name)。

timeoutInMinutes

可选。5 到 480 分钟 (8 个小时) 之间的一个分钟数,在此时间后,如果构建未完成, CodeBuild 会将其停止。如果未指定,则使用默认值 60。要确定是否以及何时由于超时而 CodeBuild 停止构建,请运行batch-get-builds命令。要确定构建是否已停止,请在输出中查看 buildStatus 的值是否为 FAILED。要确定构建何时超时,请在输出中查看与 TIMED_OUTphaseStatus 值关联的 endTime 值。

queuedTimeoutIn分钟

可选。分钟数,介于 5 到 480(8 小时)之间,如果仍在排队,则在该时间之后 CodeBuild停止构建。如果未指定,则使用默认值 60。

encryptionKey

可选。Amazon KMS key用于加密生成输出的 CodeBuild 别名或 ARN。如果您指定别名,请使用格式 arn:aws:kms:region-ID:account-ID:key/key-ID,或者,如果存在别名,请使用格式 alias/key-alias。如果未指定,则会使用 Amazon S3 的 Amazon 托管 KMS 密钥。

tags

可选。一组 Tag 对象,提供您要与此构建项目关联的标签。您最多可指定 50 个标签。任何支持 CodeBuild 构建项目标签的Amazon服务都可以使用这些标签。每个标签都表示为带有 keyvalue 的对象。

vpcConfig

可选。一个VpcConfig对象,其中包含有关您的项目 VPC 配置的信息信息。有关更多信息,请参阅将 Amazon CodeBuild 与 Amazon Virtual Private Cloud 结合使用

这些属性包括:

vpcId

必需。 CodeBuild 使用的 VPC ID。运行此命令获取您的区域中的所有 VPC ID 的列表:

aws ec2 describe-vpcs --region <region-ID>
subnets

必需。子网 ID 数组,其中包括使用的资源 CodeBuild。运行此命令,以获取这些 ID:

aws ec2 describe-subnets --filters "Name=vpc-id,Values=<vpc-id>" --region <region-ID>
securityGroupIds

必需。用于允许访问 VPC 中的资源的一 CodeBuild 组安全组 ID。运行此命令,以获取这些 ID:

aws ec2 describe-security-groups --filters "Name=vpc-id,Values=<vpc-id>" --<region-ID>

badgeEnabled

可选。指定是否在 CodeBuild 项目中包含构建徽章。设置为 true 可启用构建徽章;设置为 false 可将其禁用。有关更多信息,请参阅 使用制作徽章示例 CodeBuild

logsConfig

一个LogsConfig对象,其中包含有关此版本日志所在位置的信息。

logsConfig/ cloudWatchLogs

包含有关将日志推送到 Logs 的 CloudWatch 信息的CloudWatchLogsConfig对象。

logsConfig/s3Logs

一个 S3 LogsConfig 对象,其中包含有关将日志推送到 Amazon S3 的信息。

fileSystemLocations

可选。包含有关您的 Amazon EFS 配置信息的ProjectFileSystemsLocation对象数组。

buildBatchConfig

可选。该buildBatchConfig对象是一个包含项目的批量生成配置信息的ProjectBuildBatchConfig结构。

buildBatchConfig/s erviceRol e

批量构建项目的服务角色 ARN。

buildBatchConfig/组合神器

布尔值,用于指定是否将批量构建的构建构件合并到单个构件位置。

buildBatchConfig/限制/ maximumBuildsAllowed

允许的最大构建数。

buildBatchConfig/限制/ computeTypesAllowed

一组字符串,用于指定批量构建允许的计算类型。请参阅构建环境计算类型以了解这些值。

buildBatchConfig/timeoutInMinutes

必须完成批量构建的最长时间(以分钟为单位)。

buildBatchConfig/batchReportMode

指定如何将构建状态报告发送到源提供商以进行批量构建。有效值包括:

REPORT_AGGREGATED_BATCH

(默认)将所有构建状态聚合到单个状态报告中。

REPORT_INDIVIDUAL_BUILDS

为每个单独的构建发送单独的状态报告。

concurrentBuildLimit

此项目允许的并发构建的最大数量。

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

创建项目

要创建项目,请再次运行 create-project 命令,传递您的 JSON 文件:

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

如果成功,项目对象的 JSON 表示形式将显示在控制台输出中。有关此数据的示例,请参阅CreateProject 响应语法

您稍后可以更改构建项目的任何设置,但构建项目名称除外。有关更多信息,请参阅更改构建项目的设置 (Amazon CLI)

要开始运行构建,请参阅运行构建 (Amazon CLI)

如果您的源代码存储在存储 GitHub 库中,并且您希望在每次将代码更改推送 CodeBuild 到存储库时都重新生成源代码,请参阅开始自动运行构建 (Amazon CLI)