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

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

创建构建项目 (Amazon CLI)

有关将 Amazon CLI 与 CodeBuild 结合使用的更多信息,请参阅命令行参考

创建CodeBuild使用Amazon CLI,您创建 JSON 格式项目结构,填写结构,然后调用create-project命令创建项目。

创建 JSON 文件

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

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> }

替换以下内容:

名称

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

description

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

source

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

/Source类型

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

  • CODECOMMIT

  • CODEPIPELINE

  • GITHUB

  • GITHUB_ENTERPRISE

  • BITBUCKET

  • S3

  • NO_SOURCE

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

/Source位置

除非你设置为必填<source-type>CODEPIPELINE. 指定存储库类型的源代码的位置。

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

  • 对于 Amazon S3,则为构建输入存储桶名称,再加上包含源代码和构建规范的 ZIP 文件的路径和名称。例如:

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

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

  • 适用于GitHub,则为指向包含源代码和构建规范文件的存储库的 HTTPS 克隆 URL。该 URL 必须包含 github.com。你必须连接Amazon您的账户GitHubaccount. 为此,请使用 CodeBuild 控制台创建构建项目。

    1. 在存储库的GitHub 授权申请页面,中组织访问部分,选择请求访问在你想要的每个仓库旁边CodeBuild以便能够在中访问.

    2. 选择 Authorize application。(在你连接到你的GitHub账户,您不需要完成构建项目的创建。 您可以关闭CodeBuild控制台

  • 适用于GitHub企业服务器,则为指向包含源代码和构建规范文件的存储库的 HTTP 或 HTTPS 克隆 URL。您还必须连接您的Amazon您的账户GitHubEnterprise Server 帐户。为此,请使用 CodeBuild 控制台创建构建项目。

    1. 在中创建个人访问令牌GitHubEnterprise Server。

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

    3. 当您使用控制台创建您的CodeBuild中的项目,对于源提供者,选择GitHub企业.

    4. 对于 Personal Access Token,请粘贴已复制到剪贴板中的令牌。选择 Save Token。您的CodeBuild您的账户现已连接到您的GitHubEnterprise Server 帐户。

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

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

  • 对于 Amazon CodePipeline,请勿为 source 指定 location 值。CodePipeline忽略此值,因为当您在中创建管道时CodePipeline,您会在管道的源阶段指定源代码位置。

/SourcegitCloneDepth

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

/SourceBuildSpec

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

/Source身份验证

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

/SourcereportBuildStatus

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

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

/SourcebuildStatusConfig

包含定义如何使用CodeBuild构建项目向源提供程序报告构建状态。此选项仅在源类型为时使用。GITHUBGITHUB_ENTERPRISE,或者BITBUCKET.

/SourcebuildStatusConfig/上下文

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

例如,您可以拥有context包含内部版本号和 webhook 触发器使用CodeBuild环境变量:

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

这导致对于由 Webhook 拉取请求事件触发的构建 #24 的上下文显示如下所示:

Amazon CodeBuild sample-project Build #24 - pr/8
/SourcebuildStatusConfig/TargetURL

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

例如,您可以设置targetUrlhttps://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
/SourcegitSubmodulesConfig

可选。有关 Git 子模块配置的信息。使用使用CodeCommit、GitHub、GitHub只能与 Bitbucket 一起使用。

/SourcegitSubmodulesConfig/FetchSub模块

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

/SourceInsecureSsl

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

/Source源标识符

用户定义的项目源标识符。对于主源可选。辅助来源是必需的。

secondarySources

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

secondarySourceVersions

可选。数组ProjectSource版本对象。如果在构建级别指定 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 个构件。这些设置包括:

/Source类型

必填项。生成输出构件的类型。有效值为:

  • CODEPIPELINE

  • NO_ARTIFACTS

  • S3

/Source位置

只能与S3构件类型。不用于其他工件类型。

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

/Source路径

只能与S3构件类型。不用于其他工件类型。

输出存储桶中用于放置 ZIP 文件或文件夹的路径。如果您未指定值path、CodeBuild使用namespaceType(如果已指定)和name以确定构建输出 ZIP 文件或文件夹的路径和名称。例如,如果指定MyPath为了pathMyArtifact.zip为了name,路径和名称将是MyPath/MyArtifact.zip.

/SourcenamespaceType

只能与S3构件类型。不用于其他工件类型。

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

artifacts/name

只能与S3构件类型。不用于其他工件类型。

内部构建输出 ZIP 文件或文件夹的名称location. 例如,如果指定MyPath为了pathMyArtifact.zip为了name,路径和名称将是MyPath/MyArtifact.zip.

/SourceoverrideArtifactName

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

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

/Source包装材料

只能与S3构件类型。不用于其他工件类型。

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

NONE

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

ZIP

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

secondaryArtifacts

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

缓存

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

环境

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

/Source类型

必填项。构建环境的类型。有关更多信息,请参阅 。类型中的CodeBuildAPI 参考.

/Source图像

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

/SourcecomputeType

必填项。指定此构建环境使用的计算资源。有关更多信息,请参阅 。computeType中的CodeBuildAPI 参考.

/Source证书

可选。Amazon S3 存储桶的 ARN、路径前缀和包含 PEM 编码证书的对象密钥。对象键可以仅为 .pem 文件,也可以为包含 PEM 编码的证书的 .zip 文件。例如,如果您的 Amazon S3 存储桶名称为my-bucket,你的路径前缀是cert,你的对象密钥名称是certificate.pem,然后可以接受的格式certificatemy-bucket/cert/certificate.pem要么arn:aws:s3:::my-bucket/cert/certificate.pem.

/Source环境变量

可选。数组EnvironmentVariable对象,其中包含您要为此构建环境指定的环境变量。每个环境变量都以包含namevalue, 和typenamevalue, 和type.

控制台和Amazon CLI用户可以查看所有环境变量。如果您对环境变量的可见性没有担心,请设置namevalue,然后设置typePLAINTEXT.

我们建议您存储具有敏感值的环境变量,例如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例如,设置nameLOGIN_PASSWORD. 将 value 设置为 /CodeBuild/dockerLoginPassword。将 type 设置为 PARAMETER_STORE

重要

如果您使用 Amazon EC2 Systems Manager Parameter Store,我们建议您使用以开头的参数名称来存储参数。/CodeBuild/(例如,/CodeBuild/dockerLoginPassword)。您可以使用CodeBuild控制台以在 Amazon EC2 Systems Manager 中创建参数。选择 Create parameter (创建参数),然后按照对话框中的说明操作。(在该对话框中,KMS 密钥,您可以指定的 ARNAmazon 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. 如果您之前选择了 New service role (新建服务角色),CodeBuild 将在您的构建项目的默认服务角色中包含此操作。但是,如果您选择了 Existing service role (现有服务角色),必须单独将此操作添加到您的服务角色中。

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

如果选择新的服务角色,该服务角色包含解密下的所有参数的权限。/CodeBuild/Amazon EC2 Systems Manager Parameter Store 中的命名空间。

您设置的环境变量将替换现有的环境变量。例如,如果 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,value,按照 Secrets Manager 中存储的参数名称设置参数名称。将 type 设置为 SECRETS_MANAGER。使用名为的秘密/CodeBuild/dockerLoginPassword例如,设置nameLOGIN_PASSWORD. 将 value 设置为 /CodeBuild/dockerLoginPassword。将 type 设置为 SECRETS_MANAGER

重要

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

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

如果你的构建项目指的是存储在 Secret Manager 中的密钥名称不是以/CodeBuild/,然后你选择了新的服务角色,您必须更新服务角色才能允许访问不以开头的机密名称/CodeBuild/. 这是因为服务角色仅允许访问以开头的密钥名称。/CodeBuild/.

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

/SourceRegistryCredential

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

环境/注册机构证书/资格认证

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

环境/注册机构证书/凭据提供者

唯一有效值为 SECRETS_MANAGER

当设置此属性时:

  • imagePullCredentials 必须设置为 SERVICE_ROLE

  • 映像不能为策划的映像或 Amazon ECR 映像。

/SourceimagePullCredentials类型

可选。CodeBuild 用于在您的生成中拉取映像的凭证的类型。有两个有效值:

CODEBUILD

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

SERVICE_ROLE

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

当您使用跨账户或专用镜像仓库镜像时,必须使用 SERVICE_ROLE 凭证。当您使用 CodeBuild 精选镜像时,必须使用 CODEBUILD 凭证。

/SourceprivilegedMode

设置为true仅当您计划使用此构建项目来构建 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"

serviceRole

必填项。服务角色的 ARNCodeBuild代表 IAM 用户用来与服务进行交互的服务(例如,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

可选。的别名或 ARNAmazon KMS key使用者使用CodeBuild对构建输出进行加密。如果您指定别名,请使用格式 arn:aws:kms:region-ID:account-ID:key/key-ID,或者,如果存在别名,请使用格式 alias/key-alias。如果未指定,则Amazon使用 Amazon S3 管理的 KMS 密钥。

标签

可选。数组标记提供您希望与此构建项目关联的标签的对象。您最多可指定 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>
子网

必填项。包含使用的资源的子网 ID 数组CodeBuild. 运行以下命令获取这些 ID:

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

必填项。使用的安全组 ID 的数组CodeBuild以允许访问 VPC 中的资源。运行以下命令获取这些 ID:

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

badgeEnabled

可选。指定是否将构建徽章与您的CodeBuild项目。设置为true启用构建徽章,或者false否则为。有关更多信息,请参阅 使用 CodeBuild 构建徽章示例

LogsConfig

一个LogsConfig包含有关此构建的日志所在位置的信息的对象。

LogsConfigcloudWatchLogs

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

LogsConfigS3Logs

网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的S3LogsConfig包含有关将日志推送到 Amazon S3 的信息的对象。

fileSystemLocations

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

buildBatchConfig

可选。这些区域有:buildBatchConfig对象为ProjectBuildBatchConfig包含项目的批量构建配置信息的结构。

buildBatchConfig/serviceRole

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

buildBatchConfig/CombineArtifacts

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

buildBatchConfig/SourcemaximumBuildsAllowed

允许的最大构建数。

buildBatchConfig/SourcecomputeTypesAllowed

指定批量构建允许的计算类型的字符串数组。请参阅构建环境计算类型对于这些价值观。

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).