本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
第 5 步:创建构建项目
(上一步:第 4 步:上传源代码和 Buildspec 文件)
在此步骤中,您将创建一个构建项目,Amazon CodeBuild 将使用它来运行构建项目。一个构建项目包含有关如何运行构建任务的信息,包括从何处获取源代码、要使用的构建环境、运行哪些生成命令以及存储构建输出的位置。一个构建环境表示操作系统、编程语言运行时和工具的组合, CodeBuild 用于运行构建。构建环境以 Docker 镜像的形式表示。有关更多信息,请参阅 Docker 文档网站上的 Docker 概述
对于这个构建环境,你指示 CodeBuild 使用包含 Java 开发工具包 (JDK) 和 Apache Maven 的 Docker 映像。
创建构建项目
-
使用 Amazon CLI 运行 create-project 命令:
aws codebuild create-project --generate-cli-skeleton
输出中将显示 JSON 格式的数据。将数据复制到已安装 Amazon CLI 的本地计算机或实例上某个位置的名为
create-project.json
的文件中。如果您选择使用其他文件名,请务必在本教程中使用该名称。按照以下格式修改所复制的数据,然后保存结果:
{ "name": "codebuild-demo-project", "source": { "type": "S3", "location": "codebuild-
region-ID
-account-ID
-input-bucket/MessageUtil.zip" }, "artifacts": { "type": "S3", "location": "codebuild-region-ID
-account-ID
-output-bucket" }, "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:4.0", "computeType": "BUILD_GENERAL1_SMALL" }, "serviceRole": "serviceIAMRole
" }Replace
serviceIAMRole
使用的 Amazon 资源名称 (ARN) CodeBuild 服务角色(例如,arn:aws:iam::
)。如需创建一个角色,请参阅创建 CodeBuild 服务角色。account-ID
:role/role-name
在此数据中:
-
name
表示此构建项目的必需标识符 (在本示例中为codebuild-demo-project
)。构建项目名称在您账户的所有构建项目中必须是唯一的。 -
适用于
source
、type
是一个必需值,表示源代码的存储库类型 (在本示例中,S3
对于 Amazon S3 存储桶)。 -
对于
source
,location
表示源代码的路径 (在本示例中,为输入存储桶名称后跟 ZIP 文件名称)。 -
适用于
artifacts
、type
是一个必需值,表示构建输出项目的存储库类型 (在本示例中,S3
对于 Amazon S3 存储桶)。 -
对于
artifacts
,location
表示您先前创建或识别的输出存储桶的名称 (在本示例中为codebuild-
)。region-ID
-account-ID
-output-bucket -
适用于
environment
、type
是一个必需值,表示构建环境的类型 (在本示例中,LINUX_CONTAINER
)。 -
适用于
environment
、image
是一个必需值,表示此构建项目使用的 Docker 映像名称和标签组合,由 Docker 映像存储库类型指定 (在本示例中为:aws/codebuild/standard:4.0
在中获取 Docker 镜像 CodeBuild Docker 映像存储库)。aws/codebuild/standard
是 Docker 镜像的名称。4.0
是 Docker 镜像的标签。要查找您可以在自己方案中使用的更多 Docker 映像,请参阅 构建环境参考。
-
适用于
environment
、computeType
是一个必需值,表示计算资源。 CodeBuild 使用(在此示例中,BUILD_GENERAL1_SMALL
)。
注意 原始 JSON 格式数据中的其他可用值,如
description
、buildspec
、auth
(包括type
和resource
)、path
、namespaceType
、name
(对于artifacts
)、packaging
、environmentVariables
(包括name
和value
)、timeoutInMinutes
、encryptionKey
和tags
(包括key
和value
) 为可选的值。本教程中未使用这些值,因此它们没有在这里显示。有关更多信息,请参阅 创建构建项目 (Amazon CLI)。 -
-
切换到您刚才保存的文件所在的目录,然后再次运行 create-project 命令。
aws codebuild create-project --cli-input-json file://create-project.json
如果成功,输出中将显示与此类似的数据。
{ "project": { "name": "codebuild-demo-project", "serviceRole": "
serviceIAMRole
", "tags": [], "artifacts": { "packaging": "NONE", "type": "S3", "location": "codebuild-region-ID
-account-ID
-output-bucket", "name": "message-util.zip" }, "lastModified": 1472661575.244, "timeoutInMinutes": 60, "created": 1472661575.244, "environment": { "computeType": "BUILD_GENERAL1_SMALL", "image": "aws/codebuild/standard:4.0", "type": "LINUX_CONTAINER", "environmentVariables": [] }, "source": { "type": "S3", "location": "codebuild-region-ID
-account-ID
-input-bucket/MessageUtil.zip" }, "encryptionKey": "arn:aws:kms:region-ID
:account-ID
:alias/aws/s3", "arn": "arn:aws:codebuild:region-ID
:account-ID
:project/codebuild-demo-project" } }-
project
表示有关此构建项目的信息。-
tags
表示已经声明的所有标签。 -
packaging
表示生成输出项目将如何存储在输出存储桶中。NONE
表示在输出存储桶中创建文件夹。生成输出项目存储在该文件夹中。 -
lastModified
表示构建项目最后一次更改的时间,采用 Unix 时间格式。 -
timeoutInMinutes
表示在此之后的分钟数 CodeBuild 如果构建未完成,会停止构建任务。(默认为 60 分钟。) -
created
表示构建项目的创建时间,采用 Unix 时间格式。 -
environmentVariables
表示已经声明且可用于的所有环境变量。 CodeBuild 在构建过程中使用。 -
encryptionKey
表示客户托管密钥的 ARN, CodeBuild 用于加密构建输出构件。 -
arn
表示构建项目的 ARN。
-
-
运行之后create-project命令中,可能会输出类似于以下内容的错误消息:用户:用户 ARN
无权执行:CodeBuild: CreateProject. 这很可能是因为您配置了Amazon CLI使用 IAM 用户的凭证,该用户没有足够的权限,无法使用。 CodeBuild 创建构建项目。要修复此问题,请配置Amazon CLI具有属于以下某个 IAM 实体的凭证:
-
您的中的管理员 IAM 用户Amazonaccount. 有关更多信息,请参阅 IAM 用户指南中的创建您的第一个 IAM 管理员用户和组。
-
您的中的 IAM 用户Amazon使用
AWSCodeBuildAdminAccess
、AmazonS3ReadOnlyAccess
, 和IAMFullAccess
附加到该 IAM 用户或 IAM 用户所属的 IAM 组的托管策略。如果你在你的中没有 IAM 用户或组Amazon具有这些权限的账户,您无法将这些权限添加到 IAM 用户或组,请与您的Amazon寻求帮助的帐户管理员。有关更多信息,请参阅 适用于 Amazon CodeBuild 的 Amazon 托管(预定义)策略。