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

创建构建项目 (AWS CLI)

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

要使用 CodeBuild 创建 AWS CLI 构建项目,您需要创建 JSON 格式的 Project (项目) 结构,填写结构并调用 create-project 命令以创建项目。

创建 JSON 文件

使用 选项,通过 create-project 命令创建骨架 JSON 文件:--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> } }

替换以下内容:

name

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

description

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

source

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

source/类型

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

  • CODECOMMIT

  • CODEPIPELINE

  • GITHUB

  • GITHUB_ENTERPRISE

  • BITBUCKET

  • S3

  • NO_SOURCE

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

源/位置

必需,除非您设置了 <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。您必须将您的 AWS 账户连接到您的 GitHub 账户。为此,请使用 CodeBuild 控制台创建构建项目。

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

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

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

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

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

    3. 当您使用控制台创建 CodeBuild 项目时,请在 Source (源) 中,对于 Source provider (源提供商),选择 Enterprise (企业版)GitHub。

    4. 对于 Personal Access Token,请粘贴已复制到剪贴板中的令牌。选择 Save Token。您的 CodeBuild 账户现已连接到您的 GitHub 企业服务器账户。

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

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

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

源/gitCloneDepth

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

源/构建规范

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

源/身份验证

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

源/reportBuildStatus

指定是否向源提供商发送构建的开始和完成状态。如果您使用 GitHub、GitHub Enterprise Server 或 Bitbucket 以外的源提供程序设置此项,则会引发 invalidInputException

源/buildStatusConfig

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

source/buildStatusConfig/上下文

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

例如,您可以使用 context 环境变量让 CodeBuild 包含构建编号和 Webhook 触发器:

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

这会导致 Webhook 拉取请求事件所触发的构建 #24 的上下文看起来像这样:

AWS CodeBuild sample-project Build #24 - pr/8
source/buildStatusConfig/targetUrl

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

例如,您可以将 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-west-2,这将展开为:

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

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

source/gitSubmodulesConfig/fetchSubmodules

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

源/InsecureSsl

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

源/sourceIdentifier

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

secondarySources

可选。包含构建项目的辅助源信息的 ProjectSource 对象的数组。您最多可以添加 12 个辅助源。对象使用 secondarySources 对象使用的相同属性。source在辅助源对象中,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(在对象级别)。有关更多信息,请参阅 使用 AWS CodeBuild 的源版本示例

artifacts

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

项目/类型

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

  • CODEPIPELINE

  • NO_ARTIFACTS

  • S3

构件/位置

仅用于 S3 构件类型。不用于其他构件类型。

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

artifacts/path

仅用于 S3 构件类型。不用于其他构件类型。

输出存储桶中用于放置 ZIP 文件或文件夹的路径。如果您没有为 path 指定值,则 CodeBuild 将使用 namespaceType(如果指定)和 name 来确定构建输出 ZIP 文件或文件夹的路径和名称。例如,如果您为 MyPath 指定 path,并为 MyArtifact.zip 指定 name,则路径和名称将为 MyPath/MyArtifact.zip

项目/namespaceType

仅用于 S3 构件类型。不用于其他构件类型。

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

artifacts/name

仅用于 S3 构件类型。不用于其他构件类型。

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

项目/overrideArtifactName

仅用于 S3 构件类型。不用于其他构件类型。

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

构件/打包

仅用于 S3 构件类型。不用于其他构件类型。

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

NONE

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

ZIP

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

secondaryArtifacts

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

cache

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

environment

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

environment/类型

必填项。构建环境的类型。有关更多信息,请参阅 https://docs.amazonaws.cn/codebuild/latest/APIReference/API_ProjectEnvironment.html#CodeBuild-Type-ProjectEnvironment-type API 参考 中的CodeBuild类型

environment/image (环境/映像)

必填项。此构建环境使用的 Docker 映像标识符。通常,此标识符表示为 image-name:tag, 例如,在 CodeBuild 用于管理其 Docker 映像的 Docker 存储库中,这可能是 aws/codebuild/standard:4.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。 有关更多信息,请参阅CodeBuild 提供的 Docker 映像

环境/computeType

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

环境/证书

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

环境/environmentVariables

可选。包含要为此构建环境指定的环境变量的 EnvironmentVariable 对象的数组。每个环境变量都以包含 namevaluetypenamevaluetype 的对象形式表示。

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

我们建议您将具有敏感值(例如 AWS 访问密钥 ID、AWS 秘密访问密钥或密码)的环境变量作为参数存储在 Amazon EC2 Systems Manager Parameter Store 或 AWS 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

重要

If you use Amazon EC2 Systems Manager Parameter Store, we recommend that you store parameters with parameter names that start with /CodeBuild/ (for example, /CodeBuild/dockerLoginPassword). You can use the CodeBuild console to create a parameter in Amazon EC2 Systems Manager. Choose Create parameter, and then follow the instructions in the dialog box. (In that dialog box, for KMS key, you can specify the ARN of an AWS KMS key in your account. Amazon EC2 Systems Manager uses this key to encrypt the parameter's value during storage and decrypt it during retrieval.) If you use the CodeBuild console to create a parameter, the console starts the parameter name with /CodeBuild/ as it is being stored. For more information, see Systems Manager Parameter Store and Systems Manager Parameter Store Console Walkthrough in the Amazon EC2 Systems Manager User Guide.

If your build project refers to parameters stored in Amazon EC2 Systems Manager Parameter Store, the build project's service role must allow the ssm:GetParameters action. If you chose New service role earlier, CodeBuild includes this action in the default service role for your build project. However, if you chose Existing service role, you must include this action to your service role separately.

If your build project refers to parameters stored in Amazon EC2 Systems Manager Parameter Store with parameter names that do not start with /CodeBuild/, and you chose New service role, you must update that service role to allow access to parameter names that do not start with /CodeBuild/. This is because that service role allows access only to parameter names that start with /CodeBuild/.

If you choose New service role, the service role includes permission to decrypt all parameters under the /CodeBuild/ namespace in the Amazon EC2 Systems Manager Parameter Store.

Environment variables you set replace existing environment variables. For example, if the Docker image already contains an environment variable named MY_VAR with a value of my_value, and you set an environment variable named MY_VAR with a value of other_value, then my_value is replaced by other_value. Similarly, if the Docker image already contains an environment variable named PATH with a value of /usr/local/sbin:/usr/local/bin, and you set an environment variable named PATH with a value of $PATH:/usr/share/ant/bin, then /usr/local/sbin:/usr/local/bin is replaced by the literal value $PATH:/usr/share/ant/bin.

Do not set any environment variable with a name that begins with CODEBUILD_. This prefix is reserved for internal use.

If an environment variable with the same name is defined in multiple places, the value is determined as follows:

  • The value in the start build operation call takes highest precedence.

  • The value in the build project definition takes next precedence.

  • The value in the buildspec declaration takes lowest precedence.

如果您使用 Secrets Manager,则对于 value,按照 Secrets Manager 中存储的参数名称设置参数名称。将 type 设置为 SECRETS_MANAGER。 使用名为 /CodeBuild/dockerLoginPassword 的密钥作为示例,将 name 设置为 LOGIN_PASSWORD。 将 value 设置为 /CodeBuild/dockerLoginPassword。 将 type 设置为 SECRETS_MANAGER

重要

If you use Secrets Manager, we recommend that you store secrets with names that start with /CodeBuild/ (for example, /CodeBuild/dockerLoginPassword). For more information, see What Is AWS Secrets Manager? in the AWS Secrets Manager User Guide.

If your build project refers to secrets stored in Secrets Manager, the build project's service role must allow the secretsmanager:GetSecretValue action. If you chose New service role earlier, CodeBuild includes this action in the default service role for your build project. However, if you chose Existing service role, you must include this action to your service role separately.

If your build project refers to secrets stored in Secrets Manager with secret names that do not start with /CodeBuild/, and you chose New service role, you must update the service role to allow access to secret names that do not start with /CodeBuild/. This is because the service role allows access only to secret names that start with /CodeBuild/.

If you choose New service role, the service role includes permission to decrypt all secrets under the /CodeBuild/ namespace in the Secrets Manager.

环境/registryCredential

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

environment/registryCredential/凭证

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

environment/registryCredential/credentialProvider

唯一有效值为 SECRETS_MANAGER

当设置此属性时:

  • imagePullCredentials 必须设置为 SERVICE_ROLE

  • 该映像不能是辅助映像或 Amazon ECR 映像。

环境/imagePullCredentialsType

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

CODEBUILD

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

服务角色

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

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

环境/privilegedMode

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

注意

By default, Docker containers do not allow access to any devices. Privileged mode grants a build project's Docker container access to all devices. For more information, see Runtime Privilege and Linux Capabilities on the Docker Docs website.

- nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay2 & - timeout -t 15 sh -c "until docker info; do echo .; sleep 1; done"

serviceRole

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

timeoutInMinutes

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

queuedTimeoutInMinutes

可选。5 到 480 分钟 (8 个小时) 之间的一个分钟数,在此时间后,如果构建仍在排队,CodeBuild 会将其停止。如果未指定,则使用默认值 60。

encryptionKey

可选。CodeBuild 用来加密构建输出的 AWS KMS 客户托管密钥 (CMK) 的别名或 ARN。如果您指定别名,请使用格式 arn:aws:kms:region-ID:account-ID:key/key-ID,或者,如果存在别名,请使用格式 alias/key-alias。 如果未指定,则使用适用于 AWS 的 Amazon S3 托管 CMK。

tags

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

vpcConfig

可选。一个 VpcConfig 对象,其中包含有关您的 项目的 VPC 配置的信息。这些属性包括:

vpcId

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

aws ec2 describe-vpcs --region <region-ID>
子网

必填项。子网 IDs 的数组,其中包含 CodeBuild 使用的资源。运行此命令以获取这些 IDs:

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

必填项。一组安全组 IDs,由 CodeBuild 用来允许访问 VPC 中的资源。运行此命令以获取这些 IDs:

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

badgeEnabled

可选。指定何时在 CodeBuild 项目中包含构建徽章。设置为 true 可启用构建错误,或设置为 false 以按角度运行。有关更多信息,请参阅 使用 CodeBuild 构建徽章示例

logsConfig

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

logsConfig/cloudWatchLogs

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

logsConfig/s3Logs

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

fileSystemLocations

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

buildBatchConfig

可选。对象是一个 buildBatchConfigProjectBuildBatchConfig 结构,其中包含项目的批量生成配置信息。

buildBatchConfig/serviceRole

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

buildBatchConfig/combineArtifacts

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

buildBatchConfig/限制/maximumBuildsAllowed

允许的最大构建数。

buildBatchConfig/限制/computeTypesAllowed

一个字符串数组,用于指定批处理构建允许的计算类型。有关这些值,请参阅构建环境计算类型

buildBatchConfig/timeoutInMinutes

批处理构建必须完成的最长时间,以分钟为单位。

创建项目

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

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

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

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

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

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