AWS CodeBuild
用户指南 (API 版本 2016-10-06)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 CodePipeline 与 CodeBuild 结合使用以测试代码和运行生成

通过使用 AWS CodePipeline 测试您的代码并借助 CodeBuild 运行生成,您可以自动执行发布流程。

下表列出了可用于执行这些操作的任务和方法。本主题不介绍如何使用 AWS 开发工具包完成这些任务。

任务 可用方法 本主题中介绍的方法
借助 CodePipeline 创建可使用 CodeBuild 自动运行生成的持续交付 (CD) 管道
  • CodePipeline 控制台

  • AWS CLI

  • AWS 开发工具包

将借助 CodeBuild 实现的测试和生成自动化添加到 CodePipeline 中现有的管道
  • CodePipeline 控制台

  • AWS CLI

  • AWS 开发工具包

先决条件

  1. 回答 规划构建 中的问题。

  2. 如果您通过 IAM 用户(而不是 AWS 根账户或管理员 IAM 用户)访问 CodePipeline,请向该用户(或该用户所属的 IAM 组)附加名为 AWSCodePipelineFullAccess 的托管策略。(不建议使用 AWS 根账户。) 这样,用户即可在 CodePipeline 中创建管道。有关更多信息,请参阅 IAM 用户指南中的附加托管策略

    注意

    向该用户(或该用户所属的 IAM 组)附加策略的 IAM 实体在 IAM 中必须拥有附加策略的权限。有关更多信息,请参阅 IAM 用户指南中的委派权限来管理 IAM 用户、组和凭证

  3. 如果您的 AWS 账户中还没有 CodePipeline 服务角色,请创建一个。借助此服务角色,CodePipeline 可代表您与其他 AWS 服务进行交互,包括 AWS CodeBuild。例如,要使用 AWS CLI 创建 CodePipeline 服务角色,请运行 IAM create-role 命令:

    对于 Linux, OS X, or Unix:

    aws iam create-role --role-name AWS-CodePipeline-CodeBuild-Service-Role --assume-role-policy-document '{"Version":"2012-10-17","Statement":{"Effect":"Allow","Principal":{"Service":"codepipeline.amazonaws.com"},"Action":"sts:AssumeRole"}}'

    对于 Windows:

    aws iam create-role --role-name AWS-CodePipeline-CodeBuild-Service-Role --assume-role-policy-document "{\"Version\":\"2012-10-17\",\"Statement\":{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"codepipeline.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}}"

    注意

    创建此 CodePipeline 服务角色的 IAM 实体必须拥有在 IAM 中创建服务角色的权限。

  4. 在创建一个 CodePipeline 服务角色或识别现有服务角色后,必须将默认 CodePipeline 服务角色策略添加到该服务角色(如果它还不是该角色的策略的一部分),如 CodePipeline 用户指南 中的查看默认 CodePipeline 服务角色策略中所述。

    注意

    添加此 CodePipeline 服务角色策略的 IAM 实体必须拥有在 IAM 中将服务角色策略添加到服务角色的权限。

  5. 创建源代码并将其上传到 CodeBuild 和 CodePipeline 支持的存储库类型,如 CodeCommit、Amazon S3 或 GitHub。(CodePipeline 目前不支持 Bitbucket。) 源代码应包含构建规范文件,不过您可在本主题稍后部分的定义生成项目时,声明一个规范文件。有关更多信息,请参阅 生成规范参考

    重要

    如果您计划使用管道来部署已生成的源代码,那么生成输出项目必须与您使用的部署系统兼容。

创建使用了 CodeBuild 的管道(CodePipeline 控制台)

执行以下步骤,创建使用 CodeBuild 来构建和部署源代码的管道。

要创建仅测试源代码的管道:

使用 CodePipeline 中的创建管道向导来创建使用 CodeBuild 的管道

  1. https://console.amazonaws.cn/codesuite/home 中打开 CodePipeline 控制台。

    您需要通过使用以下方式登录 AWS Management Console:

    • 您的 AWS 根账户。我们不建议这么做。有关更多信息,请参阅 IAM 用户指南中的账户根用户

    • AWS 账户中的 IAM 管理员用户。有关更多信息,请参阅 IAM 用户指南中的创建您的第一个 IAM 管理员用户和组

    • 您的 AWS 账户中的 IAM 用户有权使用以下最低程度的操作:

      codepipeline:* iam:ListRoles iam:PassRole s3:CreateBucket s3:GetBucketPolicy s3:GetObject s3:ListAllMyBuckets s3:ListBucket s3:PutBucketPolicy codecommit:ListBranches codecommit:ListRepositories codedeploy:GetApplication codedeploy:GetDeploymentGroup codedeploy:ListApplications codedeploy:ListDeploymentGroups elasticbeanstalk:DescribeApplications elasticbeanstalk:DescribeEnvironments lambda:GetFunctionConfiguration lambda:ListFunctions opsworks:DescribeStacks opsworks:DescribeApps opsworks:DescribeLayers
  2. 在 AWS 区域选择器中,选择构建项目 AWS 资源所在的区域。此区域还必须支持 CodeBuild。有关更多信息,请参阅 Amazon Web Services General Reference 中的“区域和终端节点”主题中的 CodeBuild

  3. 创建管道。如果显示 CodePipeline 信息页面,请选择 Create pipeline (创建管道)。如果显示 Pipelines (管道) 页面,请选择 Create pipeline (创建管道)

  4. Step 1: Choose pipeline settings (步骤 1: 选择管道设置) 页面上,对于 Pipeline name (管道名称),输入管道的名称(例如,CodeBuildDemoPipeline)。如果您选择其他名称,请确保在本过程中始终使用它。

  5. 对于 Role name (角色名称),执行以下操作之一:

    选择 New service role (新服务角色),然后在 Role Name (角色名称) 中,输入新服务角色的名称。

    选择 Existing service role (现有服务角色),然后选择已创建或标识为此主题的先决条件一部分的 CodePipeline 服务角色。

  6. 对于 Artifact store (项目存储),执行下列操作之一:

    • 选择 Default location (默认位置) 以将默认项目存储(如指定为默认值的 Amazon S3 项目存储桶)用于为管道选择的区域中的管道。

    • 如果您现已在管道所在的区域中创建项目存储(例如,Amazon S3 项目存储桶),请选择 Custom location (自定义位置)

    注意

    这不是管道的源代码的源存储桶。这是管道的项目存储。管道所在区域中的每个管道都需要一个单独的项目存储(例如,Amazon S3 存储桶)。

  7. 选择 Next (下一步)

  8. Step 2: Add source stage (步骤 2: 添加资源阶段) 页面上,对于 Source provider (源提供商),执行下列操作之一:

    • 如果您的源代码存储在 Amazon S3 存储桶中,请选择 Amazon S3。对于 Bucket (存储桶),选择包含您的源代码的 Amazon S3 存储桶。对于 S3 object key (S3 对象键),输入包含源代码的文件的名称(例如 file-name.zip)。选择 Next (下一步)

    • 如果您的源代码存储在 AWS CodeCommit 存储库中,请选择 CodeCommit。对于 Repository name,请选择包含源代码的存储库的名称。对于 Branch name,请选择表示要构建的源代码版本的分支名称。选择 Next (下一步)

    • 如果您的源代码存储在 GitHub 存储库中,请选择 GitHub。选择 Connect to GitHub,然后按照说明进行操作以通过 GitHub 进行身份验证。对于 Repository,请选择包含源代码的存储库的名称。对于 Branch,请选择表示您要构建的源代码版本的分支名称。

    选择 Next (下一步)

  9. Step 3: Add build stage (步骤 3: 添加构建阶段) 页面上,对于 Build provider (构建提供商),选择 CodeBuild

  10. 如果您已有要使用的构建项目的名称,则对于 Project name (项目名称),选择构建项目的名称并跳到本过程的步骤 22。否则,使用以下步骤在 CodeBuild 中创建项目。

    注意

    如果您选择一个现有的生成项目,那么它必须具有已定义的生成输出项目设置(即使 CodePipeline 覆盖它们)。有关更多信息,请参阅 创建构建项目 (控制台)更改构建项目的设置 (控制台)

    重要

    如果您为 AWS CodeBuild 项目启用 Webhook,并且该项目用作 CodePipeline 中的生成步骤,则将为每次提交创建两个相同的生成。一个生成通过 Webhook 触发,另一个生成通过 CodePipeline 触发。由于账单基于每个生成,因此您需要为这两个生成付费。因此,如果您使用的是 CodePipeline,建议您在 CodeBuild 中禁用 Webhook。在 CodeBuild 控制台中,清除 Webhook 框。有关更多信息,请参阅 更改构建项目的设置 (控制台)

  11. Open the AWS CodeBuild console at https://console.amazonaws.cn/codesuite/codebuild/home.

  12. 如果显示 CodeBuild 信息页面,请选择 Create build project (创建构建项目)。否则,请在导航窗格上展开 Build (构建),然后依次选择 Build projects (构建项目)Create build project (创建构建项目)

  13. 对于 Project name (项目名称),输入此构建项目的名称。构建项目名称在您的各个 AWS 账户内必须是唯一的。

  14. (可选)输入描述。

  15. 对于 Environment (环境),请执行以下操作之一:

    • 要使用以 CodeBuild 管理的 Docker 映像为基础的构建环境,请选择 Managed image (托管映像)。从 Operating system (操作系统)Runtime (运行时)Runtime version (运行时版本) 下拉列表中进行选择。有关更多信息,请参阅CodeBuild 提供的 Docker 镜像

    • 要使用以 AWS 账户内 Amazon ECR 存储库中的 Docker 映像为基础的构建环境,请选择 Custom image (自定义映像)。对于 Environment type (环境类型),选择一种环境类型,然后选择 Amazon ECR。使用 Amazon ECR repository (Amazon ECR 存储库)Amazon ECR image (Amazon ECR 映像) 下拉列表选择 Amazon ECR 存储库和该存储库中的 Docker 映像。

    • 要使用以 Docker Hub 中公开提供的 Docker 映像为基础的构建环境,请选择 Other location (其他位置)。在 Other location (其他位置) 中,使用格式 docker repository/docker-image-name 输入 Docker 映像 ID。

    仅当您计划使用此构建项目来构建 Docker 映像且您选择的构建环境映像不是由具有 Docker 支持的 CodeBuild 提供时,才选择 Privileged (特权)。否则,尝试与 Docker 守护程序交互的所有关联的构建都将失败。您还必须启动 Docker 守护程序,以便您的构建可根据需要与之交互。要这样做,您可以通过运行以下生成命令,在您生成规范的 install 阶段初始化 Docker 守护程序。(如果选择了由支持 Docker 的 CodeBuild 提供的构建环境映像,请不要运行以下构建命令。)

    - nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay& - timeout -t 15 sh -c "until docker info; do echo .; sleep 1; done"
  16. Service role (服务角色) 中,执行下列操作之一:

    • 如果您没有 CodeBuild 服务角色,请选择 New service role (新建服务角色)。在 Role name (角色名称) 中,接受默认名称或输入您自己的名称。

    • 如果您有 CodeBuild 服务角色,请选择 Existing service role (现有服务角色)。在 Role name (角色名称) 中,选择服务角色。

    注意

    当您使用控制台来创建或更新生成项目时,您可以同时创建 CodeBuild 服务角色。默认情况下,这个角色仅能与该构建项目配合使用。如果您使用控制台将此服务角色与另一个构建项目关联,则此角色将更新以便与关联的构建项目结合使用。一个服务角色最多可与 10 个构建项目结合使用。

  17. 展开 Additional configuration (其他配置)

    要指定 60 分钟(默认值)以外的构建超时时间,请使用 hours (小时)minutes (分钟) 框设置一个介于 5 和 480 分钟(8 小时)之间的超时时间。

    对于 Compute (计算),请选择一个可用选项。

    对于 Environment variables (环境变量),请使用 Name (名称)Value (值) 为要使用的构建环境指定任何可选的环境变量。要添加更多环境变量,请选择 Add environment variable (添加环境变量)

    重要

    强烈建议不要将敏感值(尤其是 AWS 访问密钥 ID 和秘密访问密钥)存储在环境变量中。使用 CodeBuild 控制台和 AWS CLI 能够以纯文本格式显示环境变量。

    要存储和检索敏感值,我们建议您的构建命令使用 AWS CLI 来与 Amazon EC2 Systems Manager Parameter Store 进行交互。AWS CLI 已在由 CodeBuild 提供的所有构建环境上安装和配置。有关更多信息,请参阅 Amazon EC2 Systems Manager 用户指南 中的 Systems Manager Parameter StoreSystems Manager Parameter Store CLI 演练

  18. 对于 Buildspec,执行以下操作之一:

    • 如果您的源代码包含构建规范文件,请选择 Use a buildspec file (使用 buildspec 文件)

    • 如果您的源代码不包含构建规范文件,请选择 Insert build commands (插入构建命令)。对于 Build commands (构建命令),请在构建环境中输入您要在构建阶段运行的命令。对于多条命令,针对基于 Linux 的构建环境,请使用 && 将每条命令分隔开;针对基于 Windows 的构建环境,请使用 ; 将每条命令分隔开。对于 Output files (输出文件),请输入您要在构建环境中发送给 CodePipeline 的构建输出文件的路径。对于多个文件,请用逗号分隔各个文件路径。

  19. 选择 Create build project (创建构建项目)

  20. 返回到 CodePipeline 控制台。

  21. Step 4: Add deploy stage (步骤 4: 添加部署阶段) 页面上,执行下列操作之一:

    • 如果您不想部署构建输出项目,请在系统提示时选择 Skip (跳过) 并确认此选择。

    • 如果要部署构建输出项目,对于 Deploy provider (部署提供商),选择部署提供商,然后在系统提示时指定设置。

    选择 Next (下一步)

  22. Review (查看) 页面上,查看您的选择,然后选择 Create pipeline (创建管道)

  23. 管道成功运行后,您可以获取构建输出项目。管道在 CodePipeline 控制台中显示后,在 Build (生成) 操作中,选择工具提示。记下 Output artifact (输出项目) 的值 (例如,MyAppBuild)。

    注意

    您还可以通过在 CodeBuild 控制台的构建详细信息页面上选择 Build artifacts (构建构件) 链接来获取构建输出项目。要前往此页面,请跳过此过程中的剩余步骤,并参阅 查看构建详细信息 (控制台)

  24. Open the Amazon S3 console at https://console.amazonaws.cn/s3/.

  25. 在存储桶列表中,请打开管道使用的存储桶。此存储桶的名称应遵循格式 codepipeline-region-ID-random-number。您可以使用 AWS CLI 运行 CodePipeline get-pipeline 命令,以获取存储桶的名称,其中,my-pipeline-name 是管道的显示名称:

    aws codepipeline get-pipeline --name my-pipeline-name

    在输出中,该 pipeline 对象包含一个 artifactStore 对象,其中包含带有存储桶名称的 location 值。

  26. 打开与您的管道名称匹配的文件夹 (根据管道名称的长度,文件夹名称可能被截断),然后打开与您在此过程的步骤 24 中记录的 Output artifact 的值匹配的文件夹。

  27. 提取文件内容。如果该文件夹中有多个文件,请提取具有最新 Last Modified 时间戳的文件的内容。(您可能需要为文件提供 .zip 扩展名,这样,您可以将其用于您系统内的 ZIP 实用工具。) 生成输出项目将位于文件的提取内容中。

  28. 如果您指示 CodePipeline 部署构建输出项目,请使用部署提供商的说明,获取部署目标上的构建输出项目。

创建使用 CodeBuild 的管道 (AWS CLI)

执行以下步骤,创建使用 CodeBuild 来构建源代码的管道。

要使用 AWS CLI 创建可部署已生成的源代码或仅测试源代码的管道,您可以调整AWS CodePipeline User Guide中的编辑管道 (AWS CLI)CodePipeline 管道结构参考

  1. 创建或标识 CodeBuild 中的构建项目。有关更多信息,请参阅创建构建项目

    重要

    生成项目必须定义生成输出项目设置(即使 CodePipeline 覆盖它们)。有关更多信息,请参阅 创建构建项目 (AWS CLI)artifacts 的描述。

  2. 请确保您已使用与本主题中所述的 IAM 实体之一对应的 AWS 访问密钥和 AWS 秘密访问密钥配置 AWS CLI。有关更多信息,请参阅 AWS Command Line Interface 开发人员指南 中的开始设置 AWS Command Line Interface

  3. 创建代表管道结构的 JSON 格式的文件。将文件命名为 create-pipeline.json 或类似名称。例如,此 JSON 格式的结构借助引用了 Amazon S3 输入存储桶的源操作和使用 CodeBuild 的生成操作创建了管道:

    { "pipeline": { "roleArn": "arn:aws:iam::account-id:role/my-AWS-CodePipeline-service-role-name", "stages": [ { "name": "Source", "actions": [ { "inputArtifacts": [], "name": "Source", "actionTypeId": { "category": "Source", "owner": "AWS", "version": "1", "provider": "S3" }, "outputArtifacts": [ { "name": "MyApp" } ], "configuration": { "S3Bucket": "my-input-bucket-name", "S3ObjectKey": "my-source-code-file-name.zip" }, "runOrder": 1 } ] }, { "name": "Build", "actions": [ { "inputArtifacts": [ { "name": "MyApp" } ], "name": "Build", "actionTypeId": { "category": "Build", "owner": "AWS", "version": "1", "provider": "CodeBuild" }, "outputArtifacts": [ { "name": "default" } ], "configuration": { "ProjectName": "my-build-project-name" }, "runOrder": 1 } ] } ], "artifactStore": { "type": "S3", "location": "AWS-CodePipeline-internal-bucket-name" }, "name": "my-pipeline-name", "version": 1 } }

    在此 JSON 格式的数据中:

    • roleArn 的值必须与您作为先决条件的一部分创建或标识的 CodePipeline 服务角色 ARN 相匹配。

    • configurationS3BucketS3ObjectKey 的值假定源代码存储在 Amazon S3 存储桶中。有关其他源代码存储库类型的设置,请参阅 CodePipeline 用户指南中的 CodePipeline 管道结构参考

    • ProjectName 的值是您之前在此过程中创建的 CodeBuild 生成项目的名称。

    • location 的值是此管道所用的 Amazon S3 存储桶的名称。有关更多信息,请参阅 CodePipeline 用户指南中的为用作 CodePipeline 项目存储的 Amazon S3 存储桶创建策略

    • name 的值是此管道的名称。所有管道名称对您的账户都必须是唯一的。

    尽管此数据仅介绍源操作和构建操作,但您可以为与测试、部署构建输出项目和调用 AWS Lambda 函数等相关的活动添加操作。有关更多信息,请参阅 CodePipeline 用户指南中的 CodePipeline 管道结构参考

  4. 切换到包含 JSON 文件的文件夹,然后运行 CodePipeline create-pipeline 命令,并指定文件名:

    aws codepipeline create-pipeline --cli-input-json file://create-pipeline.json

    注意

    必须在支持 CodeBuild 的 AWS 区域中创建管道。有关更多信息,请参阅 Amazon Web Services General Reference 中的“区域和终端节点”主题中的 CodeBuild

    输出中将显示 JSON 格式的数据,并且 CodePipeline 会创建管道。

  5. 要获取有关管道状态的信息,请运行 CodePipeline get-pipeline-state 命令,指定管道名称:

    aws codepipeline get-pipeline-state --name my-pipeline-name

    在输出中,查找确认构建成功的信息。省略号 (...) 用于显示为简洁起见而省略的数据。

    { ... "stageStates": [ ... { "actionStates": [ { "actionName": "CodeBuild", "latestExecution": { "status": "SUCCEEDED", ... }, ... } ] } ] }

    如果您过早运行此命令,您可能不会看到有关构建操作的信息。您可能需要多次运行此命令,直到管道已完成构建操作的运行。

  6. 成功构建后,请按照以下说明操作,获取构建输出项目。通过以下网址打开 Amazon S3 控制台:https://console.amazonaws.cn/s3/

    注意

    您还可以通过在 CodeBuild 控制台的相关构建详细信息页面上选择 Build artifacts (构建构件) 链接来获取构建输出项目。要前往此页面,请跳过此过程中的剩余步骤,并参阅 查看构建详细信息 (控制台)

  7. 在存储桶列表中,请打开管道使用的存储桶。此存储桶的名称应遵循格式 codepipeline-region-ID-random-number。您可以从 create-pipeline.json 文件中获取存储桶的名称,或您可以通过运行 CodePipeline get-pipeline 命令获取该存储桶的名称。

    aws codepipeline get-pipeline --name my-pipeline-name

    在输出中,该 pipeline 对象包含一个 artifactStore 对象,其中包含带有存储桶名称的 location 值。

  8. 打开与您的管道名称相匹配的文件夹 (例如,my-pipeline-name)。

  9. 在该文件夹中,打开名为 default 的文件夹。

  10. 提取文件内容。如果该文件夹中有多个文件,请提取具有最新 Last Modified 时间戳的文件的内容。(您可能需要为文件提供 .zip 扩展名,这样,您可以将其用于您系统内的 ZIP 实用工具。) 生成输出项目将位于文件的提取内容中。

将 CodeBuild 生成操作添加到管道(CodePipeline 控制台)

  1. https://console.amazonaws.cn/codesuite/home 中打开 CodePipeline 控制台。

    您应通过使用以下方式登录 AWS Management Console:

    • 您的 AWS 根账户。我们不建议这么做。有关更多信息,请参阅 IAM 用户指南中的账户根用户

    • AWS 账户中的 IAM 管理员用户。有关更多信息,请参阅 IAM 用户指南中的创建您的第一个 IAM 管理员用户和组

    • AWS 账户中的 IAM 用户,具有执行以下最基本操作的权限:

      codepipeline:* iam:ListRoles iam:PassRole s3:CreateBucket s3:GetBucketPolicy s3:GetObject s3:ListAllMyBuckets s3:ListBucket s3:PutBucketPolicy codecommit:ListBranches codecommit:ListRepositories codedeploy:GetApplication codedeploy:GetDeploymentGroup codedeploy:ListApplications codedeploy:ListDeploymentGroups elasticbeanstalk:DescribeApplications elasticbeanstalk:DescribeEnvironments lambda:GetFunctionConfiguration lambda:ListFunctions opsworks:DescribeStacks opsworks:DescribeApps opsworks:DescribeLayers
  2. 在 AWS 区域选择器中,请选择管道所在的区域。此区域还必须支持 CodeBuild。有关更多信息,请参阅 Amazon Web Services General Reference 中的“区域和终端节点”主题中的 CodeBuild

  3. Pipelines (管道) 页面上,选择管道的名称。

  4. 在管道详细信息页面的 Source (源) 操作中,选择工具提示。记下 Output artifact (输出项目) 的值 (例如,MyApp):

    注意

    此过程向您演示如何将生成操作添加到 SourceBeta 阶段之间的生成阶段内。如果您要在其他位置添加生成操作,在您要添加生成操作的位置之前的操作上选择工具提示,并记下 Output artifact (输出项目) 的值。

  5. 选择 Edit

  6. Source (源)Beta (测试版) 阶段之间,选择 Add stage (添加阶段)

    注意

    此过程向您演示如何向管道添加新的生成阶段。要将生成操作添加到现有的阶段,请选择阶段中的 Edit stage (编辑阶段),然后跳到此过程的步骤 8。

    此过程向您演示如何在 SourceBeta 阶段之间添加生成阶段。要在其他位置添加构建阶段,请在所需位置选择 Add stage (添加阶段)

  7. 对于 Stage name (阶段名称),输入生成阶段的名称(例如,Build)。如果您选择了其他名称,请在整个过程中使用该名称。

  8. 在选定阶段内,选择 Add action (添加操作)

    注意

    此过程向您演示如何在生成阶段内添加生成操作。要在其他位置添加构建操作,请在所需位置选择 Add action (添加操作)。您可能需要先在您要添加构建操作的现有阶段内选择 Edit stage (编辑阶段)

  9. Edit action (编辑操作) 中,对于 Action name (操作名称),输入操作的名称(例如,CodeBuild)。如果您选择了其他名称,请在整个过程中使用该名称。

  10. 对于 Action provider (操作提供商),选择 CodeBuild

  11. 如果您在 CodeBuild 中已有一个构建项目,则对于 Project name (项目名称),选择构建项目的名称,然后跳到本过程的步骤 22。

    注意

    如果您选择一个现有的生成项目,那么它必须具有已定义的生成输出项目设置(即使 CodePipeline 覆盖它们)。有关更多信息,请参阅创建构建项目 (控制台)更改构建项目的设置 (控制台)中的 Artifacts (构件) 的描述。

    重要

    如果您为 CodeBuild 项目启用 Webhook,并且该项目用作 CodePipeline 中的构建步骤,则将为每次提交创建两个相同的构建。一个生成通过 Webhook 触发,另一个生成通过 CodePipeline 触发。由于账单基于每个生成,因此您需要为这两个生成付费。因此,如果您使用的是 CodePipeline,建议您在 CodeBuild 中禁用 Webhook。在 CodeBuild 控制台中,清除 Webhook 框。有关更多信息,请参阅 更改构建项目的设置 (控制台)

  12. Open the AWS CodeBuild console at https://console.amazonaws.cn/codesuite/codebuild/home.

  13. 如果显示 CodeBuild 信息页面,请选择 Create build project (创建构建项目)。否则,请在导航窗格上展开 Build (构建),然后依次选择 Build projects (构建项目)Create build project (创建构建项目)

  14. 对于 Project name (项目名称),输入此构建项目的名称。构建项目名称在您的各个 AWS 账户内必须是唯一的。

  15. (可选)输入描述。

  16. 对于 Environment (环境),请执行以下操作之一:

    • 要使用以 CodeBuild 管理的 Docker 映像为基础的构建环境,请选择 Managed image (托管映像)。从 Operating system (操作系统)Runtime (运行时)Runtime version (运行时版本) 下拉列表中进行选择。有关更多信息,请参阅CodeBuild 提供的 Docker 镜像

    • 要使用以 AWS 账户内 Amazon ECR 存储库中的 Docker 映像为基础的构建环境,请选择 Custom image (自定义映像)。对于 Environment type (环境类型),选择一种环境类型,然后选择 Amazon ECR。使用 Amazon ECR repository (Amazon ECR 存储库)Amazon ECR image (Amazon ECR 映像) 下拉列表选择 Amazon ECR 存储库和该存储库中的 Docker 映像。

    • 要使用以 Docker Hub 中公开提供的 Docker 映像为基础的构建环境,请选择 Other location (其他位置)。在 Other location (其他位置) 中,使用格式 docker repository/docker-image-name 输入 Docker 映像 ID。

    仅当您计划使用此构建项目来构建 Docker 映像且您选择的构建环境映像不是由具有 Docker 支持的 CodeBuild 提供时,才选择 Privileged (特权)。否则,尝试与 Docker 守护程序交互的所有关联的构建都将失败。您还必须启动 Docker 守护程序,以便您的构建可根据需要与之交互。要这样做,您可以通过运行以下生成命令,在您生成规范的 install 阶段初始化 Docker 守护程序。(如果选择了由支持 Docker 的 CodeBuild 提供的构建环境映像,请不要运行以下构建命令。)

    - nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay& - timeout -t 15 sh -c "until docker info; do echo .; sleep 1; done"
  17. Service role (服务角色) 中,执行下列操作之一:

    • 如果您没有 CodeBuild 服务角色,请选择 New service role (新建服务角色)。在 Role name (角色名称) 中,接受默认名称或输入您自己的名称。

    • 如果您有 CodeBuild 服务角色,请选择 Existing service role (现有服务角色)。在 Role name (角色名称) 中,选择服务角色。

    注意

    当您使用控制台来创建或更新生成项目时,您可以同时创建 CodeBuild 服务角色。默认情况下,这个角色仅能与该构建项目配合使用。如果您使用控制台将此服务角色与另一个构建项目关联,则此角色将更新以便与关联的构建项目结合使用。一个服务角色最多可与 10 个构建项目结合使用。

  18. 展开 Additional configuration (其他配置)

    要指定 60 分钟(默认值)以外的构建超时时间,请使用 hours (小时)minutes (分钟) 框设置一个介于 5 和 480 分钟(8 小时)之间的超时时间。

    对于 Compute (计算),请选择一个可用选项。

    对于 Environment variables (环境变量),请使用 Name (名称)Value (值) 为要使用的构建环境指定任何可选的环境变量。要添加更多环境变量,请选择 Add environment variable (添加环境变量)

    重要

    强烈建议不要将敏感值(尤其是 AWS 访问密钥 ID 和秘密访问密钥)存储在环境变量中。使用 CodeBuild 控制台和 AWS CLI 能够以纯文本格式显示环境变量。

    要存储和检索敏感值,我们建议您的构建命令使用 AWS CLI 来与 Amazon EC2 Systems Manager Parameter Store 进行交互。AWS CLI 已在由 CodeBuild 提供的所有构建环境上安装和配置。有关更多信息,请参阅 Amazon EC2 Systems Manager 用户指南 中的 Systems Manager Parameter StoreSystems Manager Parameter Store CLI 演练

  19. 对于 Buildspec,执行以下操作之一:

    • 如果您的源代码包含构建规范文件,请选择 Use a buildspec file (使用 buildspec 文件)

    • 如果您的源代码不包含构建规范文件,请选择 Insert build commands (插入构建命令)。对于 Build commands (构建命令),请在构建环境中输入您要在构建阶段运行的命令。对于多条命令,针对基于 Linux 的构建环境,请使用 && 将每条命令分隔开;针对基于 Windows 的构建环境,请使用 ; 将每条命令分隔开。对于 Output files (输出文件),请输入您要在构建环境中发送给 CodePipeline 的构建输出文件的路径。对于多个文件,请用逗号分隔各个文件路径。

  20. 选择 Create build project (创建构建项目)

  21. 返回到 CodePipeline 控制台。

  22. 对于 Input artifacts (输入项目),选择您在此过程的步骤 4 中记下的输出项目。

  23. 对于 Output artifacts (输出项目),输入输出项目的名称(例如,MyAppBuild)。

  24. 选择 Add Action

  25. 选择 Save (保存),然后选择 Save (保存) 以保存对管道的更改。

  26. 选择 Release change

  27. 管道成功运行后,您可以获取构建输出项目。管道在 CodePipeline 控制台中显示后,在 Build (生成) 操作中,选择工具提示。记下 Output artifact (输出项目) 的值 (例如,MyAppBuild)。

    注意

    您还可以通过在 CodeBuild 控制台的构建详细信息页面上选择 Build artifacts (构建构件) 链接来获取构建输出项目。要访问此页面,请参阅 查看构建详细信息 (控制台),然后跳到此过程的步骤 31。

  28. Open the Amazon S3 console at https://console.amazonaws.cn/s3/.

  29. 在存储桶列表中,请打开管道使用的存储桶。此存储桶的名称应遵循格式 codepipeline-region-ID-random-number。您可以使用 AWS CLI 运行 CodePipeline get-pipeline 命令,获取存储桶的名称:

    aws codepipeline get-pipeline --name my-pipeline-name

    在输出中,该 pipeline 对象包含一个 artifactStore 对象,其中包含带有存储桶名称的 location 值。

  30. 打开与您的管道名称匹配的文件夹 (根据管道名称的长度,文件夹名称可能被截断),然后打开与您在此过程的步骤 28 中记录的 Output artifact 的值匹配的文件夹。

  31. 提取文件内容。如果该文件夹中有多个文件,请提取具有最新 Last Modified 时间戳的文件的内容。(您可能需要为文件提供 .zip 扩展名,这样,您可以将其用于您系统内的 ZIP 实用工具。) 生成输出项目将位于文件的提取内容中。

  32. 如果您指示 CodePipeline 部署构建输出项目,请使用部署提供商的说明,获取部署目标上的构建输出项目。

将 CodeBuild 测试操作添加到管道(CodePipeline 控制台)

  1. https://console.amazonaws.cn/codesuite/home 中打开 CodePipeline 控制台。

    您应通过使用以下方式登录 AWS Management Console:

    • 您的 AWS 根账户。我们不建议这么做。有关更多信息,请参阅 IAM 用户指南中的账户根用户

    • AWS 账户中的 IAM 管理员用户。有关更多信息,请参阅 IAM 用户指南中的创建您的第一个 IAM 管理员用户和组

    • AWS 账户中的 IAM 用户,具有执行以下最基本操作的权限:

      codepipeline:* iam:ListRoles iam:PassRole s3:CreateBucket s3:GetBucketPolicy s3:GetObject s3:ListAllMyBuckets s3:ListBucket s3:PutBucketPolicy codecommit:ListBranches codecommit:ListRepositories codedeploy:GetApplication codedeploy:GetDeploymentGroup codedeploy:ListApplications codedeploy:ListDeploymentGroups elasticbeanstalk:DescribeApplications elasticbeanstalk:DescribeEnvironments lambda:GetFunctionConfiguration lambda:ListFunctions opsworks:DescribeStacks opsworks:DescribeApps opsworks:DescribeLayers
  2. 在 AWS 区域选择器中,请选择管道所在的区域。此区域还必须支持 CodeBuild。有关更多信息,请参阅 Amazon Web Services General Reference 中的“区域和终端节点”主题中的 CodeBuild

  3. Pipelines (管道) 页面上,选择管道的名称。

  4. 在管道详细信息页面的 Source (源) 操作中,选择工具提示。记下 Output artifact (输出项目) 的值 (例如,MyApp):

    注意

    此过程向您演示如何将测试操作添加到 SourceBeta 阶段之间的测试阶段内。如果您要在其他位置添加测试操作,请将鼠标指针停留在之前的操作上,然后记下 Output artifact (输出项目) 的值。

  5. 选择 Edit

  6. 紧接着 Source (源) 阶段,选择 Add stage (添加阶段)

    注意

    此过程向您演示如何向管道添加新的测试阶段。要将测试操作添加到现有的阶段,请选择阶段中的 Edit stage (编辑阶段),然后跳到此过程的步骤 8。

    此过程还向您演示如何紧接着 Source 阶段添加测试阶段。要在其他位置添加测试阶段,请在所需位置选择 Add stage (添加阶段)

  7. 对于 Stage name (阶段名称),输入测试阶段的名称(例如,Test)。如果您选择了其他名称,请在整个过程中使用该名称。

  8. 在选定阶段中,选择 Add action (添加操作)

    注意

    此过程向您演示如何在测试阶段内添加测试操作。要在其他位置添加测试操作,请在所需位置选择 Add action (添加操作)。您可能需要先在您要添加测试操作的现有阶段内选择 Edit stage (编辑阶段)

  9. Edit action (编辑操作) 中,对于 Action name (操作名称),输入操作的名称(例如,Test)。如果您选择了其他名称,请在整个过程中使用该名称。

  10. 对于 Action provider (操作提供商),选择 Test (测试) 下的 CodeBuild

  11. 如果您在 CodeBuild 中已有一个构建项目,则对于 Project name (项目名称),选择构建项目的名称,然后跳到本过程的步骤 22。

    重要

    如果您为 CodeBuild 项目启用 Webhook,并且该项目用作 CodePipeline 中的构建步骤,则将为每次提交创建两个相同的构建。一个生成通过 Webhook 触发,另一个生成通过 CodePipeline 触发。由于账单基于每个生成,因此您需要为这两个生成付费。因此,如果您使用的是 CodePipeline,建议您在 CodeBuild 中禁用 Webhook。在 CodeBuild 控制台中,清除 Webhook 框。有关更多信息,请参阅 更改构建项目的设置 (控制台)

  12. Open the AWS CodeBuild console at https://console.amazonaws.cn/codesuite/codebuild/home.

  13. 如果显示 CodeBuild 信息页面,请选择 Create build project (创建构建项目)。否则,请在导航窗格上展开 Build (构建),然后依次选择 Build projects (构建项目)Create build project (创建构建项目)

  14. 对于 Project name (项目名称),输入此构建项目的名称。构建项目名称在您的各个 AWS 账户内必须是唯一的。

  15. (可选)输入描述。

  16. 对于 Environment (环境),请执行以下操作之一:

    • 要使用以 CodeBuild 管理的 Docker 映像为基础的构建环境,请选择 Managed image (托管映像)。从 Operating system (操作系统)Runtime (运行时)Runtime version (运行时版本) 下拉列表中进行选择。有关更多信息,请参阅CodeBuild 提供的 Docker 镜像

    • 要使用以 AWS 账户内 Amazon ECR 存储库中的 Docker 映像为基础的构建环境,请选择 Custom image (自定义映像)。对于 Environment type (环境类型),选择一种环境类型,然后选择 Amazon ECR。使用 Amazon ECR repository (Amazon ECR 存储库)Amazon ECR image (Amazon ECR 映像) 下拉列表选择 Amazon ECR 存储库和该存储库中的 Docker 映像。

    • 要使用以 Docker Hub 中公开提供的 Docker 映像为基础的构建环境,请选择 Other location (其他位置)。在 Other location (其他位置) 中,使用格式 docker repository/docker-image-name 输入 Docker 映像 ID。

    仅当您计划使用此构建项目来构建 Docker 映像且您选择的构建环境映像不是由具有 Docker 支持的 CodeBuild 提供时,才选择 Privileged (特权)。否则,尝试与 Docker 守护程序交互的所有关联的构建都将失败。您还必须启动 Docker 守护程序,以便您的构建可根据需要与之交互。要这样做,您可以通过运行以下生成命令,在您生成规范的 install 阶段初始化 Docker 守护程序。(如果选择了由支持 Docker 的 CodeBuild 提供的构建环境映像,请不要运行以下构建命令。)

    - nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay& - timeout -t 15 sh -c "until docker info; do echo .; sleep 1; done"
  17. Service role (服务角色) 中,执行下列操作之一:

    • 如果您没有 CodeBuild 服务角色,请选择 New service role (新建服务角色)。在 Role name (角色名称) 中,接受默认名称或输入您自己的名称。

    • 如果您有 CodeBuild 服务角色,请选择 Existing service role (现有服务角色)。在 Role name (角色名称) 中,选择服务角色。

    注意

    当您使用控制台来创建或更新生成项目时,您可以同时创建 CodeBuild 服务角色。默认情况下,这个角色仅能与该构建项目配合使用。如果您使用控制台将此服务角色与另一个构建项目关联,则此角色将更新以便与关联的构建项目结合使用。一个服务角色最多可与 10 个构建项目结合使用。

  18. 展开 Additional configuration (其他配置)

    要指定 60 分钟(默认值)以外的构建超时时间,请使用 hours (小时)minutes (分钟) 框设置一个介于 5 和 480 分钟(8 小时)之间的超时时间。

    对于 Compute (计算),请选择一个可用选项。

    对于 Environment variables (环境变量),请使用 Name (名称)Value (值) 为要使用的构建环境指定任何可选的环境变量。要添加更多环境变量,请选择 Add environment variable (添加环境变量)

    重要

    强烈建议不要将敏感值(尤其是 AWS 访问密钥 ID 和秘密访问密钥)存储在环境变量中。使用 CodeBuild 控制台和 AWS CLI 能够以纯文本格式显示环境变量。

    要存储和检索敏感值,我们建议您的构建命令使用 AWS CLI 来与 Amazon EC2 Systems Manager Parameter Store 进行交互。AWS CLI 已在由 CodeBuild 提供的所有构建环境上安装和配置。有关更多信息,请参阅 Amazon EC2 Systems Manager 用户指南 中的 Systems Manager Parameter StoreSystems Manager Parameter Store CLI 演练

  19. 对于 Buildspec,执行以下操作之一:

    • 如果您的源代码包含构建规范文件,请选择 Use a buildspec file (使用 buildspec 文件)

    • 如果您的源代码不包含构建规范文件,请选择 Insert build commands (插入构建命令)。对于 Build commands (构建命令),请在构建环境中输入您要在构建阶段运行的命令。对于多条命令,针对基于 Linux 的构建环境,请使用 && 将每条命令分隔开;针对基于 Windows 的构建环境,请使用 ; 将每条命令分隔开。对于 Output files (输出文件),请输入您要在构建环境中发送给 CodePipeline 的构建输出文件的路径。对于多个文件,请用逗号分隔各个文件路径。

  20. 选择 Create build project (创建构建项目)

  21. 返回到 CodePipeline 控制台。

  22. 对于 Input artifacts (输入项目),选择您在此过程的步骤 4 中记下的 Output artifact (输出项目) 的值。

  23. (可选)如果您希望测试操作来生成输出项目,并且相应地设置生成规范,那么对于 Output artifact (输出项目),请输入您要分配给输出项目的值。

  24. 选择 Save

  25. 选择 Release change

  26. 管道成功运行后,您可以获取测试结果。在管道的 Test (测试) 阶段中,选择 CodeBuild 超链接以在 CodeBuild 控制台中打开相关的生成项目页面。

  27. 在生成项目页面上的 Build history (生成历史记录) 中,选择 Build run (生成运行) 超链接。

  28. 在生成运行页面的 Build logs (生成日志) 中,选择 View entire log (查看完整日志) 超链接以在 Amazon CloudWatch 控制台中打开相关的生成日志。

  29. 滚动浏览构建日志,查看测试结果。