将 AWS CodePipeline 与 AWS CodeBuild 结合使用以测试代码和运行构建 - AWS CodeBuild
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 AWS CodePipeline 与 AWS CodeBuild 结合使用以测试代码和运行构建

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

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

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

  • AWS CLI

  • AWS SDKs

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

  • AWS CLI

  • AWS SDKs

Prerequisites

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

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

    注意

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

  3. 创建 CodePipeline 服务角色(如果您的 AWS 账户未提供此服务角色)。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 中的查看默认 服务角色策略AWS CodePipeline中所述。

    注意

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

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

    重要

    如果您计划使用管道来部署已生成的源代码,则构建输出构件必须与您使用的部署系统兼容。

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

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

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

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

  1. 使用以下项登录到 AWS 管理控制台:

    • 您的 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. https://console.amazonaws.cn/codesuite/codepipeline/home 中打开 AWS CodePipeline 控制台。

  3. 在 AWS 区域选择器中,选择构建项目 AWS 资源所在的 AWS 区域。这必须是支持 CodeBuild 的 AWS 区域。有关更多信息,请参阅 Amazon Web Services 一般参考 中的 AWS CodeBuild

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

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

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

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

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

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

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

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

    注意

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

  8. 选择下一步

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

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

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

    • 如果您的源代码存储在 GitHub 存储库中,请选择 GitHub。 选择 Connect to GitHub (连接到 AWS Lambda),然后按照说明向 GitHub 进行身份验证。 对于 Repository (存储库),选择包含源代码的存储库的名称。对于 Branch (分支),请选择包含要构建的源代码版本的分支名称。

    选择下一步

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

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

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

    重要

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

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

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

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

    选择下一步

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

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

    注意

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

  15. 通过以下网址打开 Amazon S3 控制台:https://console.amazonaws.cn/s3/

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

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

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

  17. 打开与您的管道名称匹配的文件夹(根据管道名称的长度,文件夹名称可能被截断),然后打开与您之前记下的 Output artifact (输出构件) 的值匹配的文件夹。

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

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

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

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

要使用 AWS CLI 创建部署已构建源代码或仅测试源代码的管道,您可以调整 中的AWS CLI编辑管道 () 和 CodePipeline 管道结构参考AWS 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 格式的结构借助引用了 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 的值假定源代码存储在 S3 存储桶中。有关其他源代码存储库类型的设置,请参阅 CodePipeline 用户指南 中的 管道结构参考AWS CodePipeline。

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

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

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

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

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

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

    您必须在支持 CodeBuild 的 AWS 区域中创建管道。有关更多信息,请参阅 Amazon Web Services 一般参考 中的 AWS 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. 使用以下项登录到 AWS 管理控制台:

    • 您的 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. https://console.amazonaws.cn/codesuite/codepipeline/home 中打开 CodePipeline 控制台。

  3. 在 AWS 区域选择器中,选择管道所在的 AWS 区域。这必须是支持 CodeBuild 的区域。有关更多信息,请参阅 Amazon Web Services 一般参考 中的 CodeBuild

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

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

    注意

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

  6. 选择 Edit (编辑)

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

    注意

    此过程向您演示如何在 Source (源)Beta (测试) 阶段之间添加构建阶段。要将生成操作添加到现有的阶段,请选择阶段中的 Edit stage (编辑阶段),然后跳到此过程的步骤 8。要在其他位置添加构建阶段,请在所需位置选择 Add stage (添加阶段)

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

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

    注意

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

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

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

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

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

    重要

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

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

  14. If a CodeBuild information page is displayed, choose Create build project. Otherwise, on the navigation pane, expand Build, choose Build projects, and then choose Create build project.

  15. For Project name, enter a name for this build project. Build project names must be unique across each AWS account.

  16. (Optional) Enter a description.

  17. For Environment, do one of the following:

    • To use a build environment based on a Docker image that is managed by CodeBuild, choose Managed image. Make your selections from the Operating system, Runtime, and Runtime version drop-down lists. For more information, see CodeBuild 提供的 Docker 映像.

    • To use a build environment based on a Docker image in an Amazon ECR repository in your AWS account, choose Custom image. For Environment type, choose an environment type, and then choose Amazon ECR. Use the Amazon ECR repository and Amazon ECR image drop-down lists to choose the Amazon ECR repository and Docker image in that repository.

    • To use a build environment based on a publicly available Docker image in Docker Hub, choose Other location. In Other location, enter the Docker image ID, using the format docker repository/docker-image-name.

    Select Privileged only if you plan to use this build project to build Docker images, and the build environment image you chose is not one provided by CodeBuild with Docker support. Otherwise, all associated builds that attempt to interact with the Docker daemon fail. You must also start the Docker daemon so that your builds can interact with it as needed. You can do this by running the following build commands to initialize the Docker daemon in the install phase of your buildspec. (Do not run the following build commands if you chose a build environment image provided by CodeBuild with Docker support.)

    - 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"
  18. In Service role, do one of the following:

    • If you do not have a CodeBuild service role, choose New service role. In Role name, enter a name for the new role.

    • If you have a CodeBuild service role, choose Existing service role. In Role ARN, choose the service role.

    注意

    When you use the console to create or update a build project, you can create a CodeBuild service role at the same time. By default, the role works with that build project only. If you use the console to associate this service role with another build project, the role is updated to work with the other build project. A service role can work with up to 10 build projects.

  19. Expand Additional configuration.

    To specify a build timeout other than 60 minutes (the default), use the hours and minutes boxes to set a timeout between 5 and 480 minutes (8 hours).

    For Compute, choose one of the available options.

    For Environment variables, use Name and Value to specify any optional environment variables for the build environment to use. To add more environment variables, choose Add environment variable.

    重要

    We strongly discourage storing sensitive values, especially AWS access key IDs and secret access keys, in environment variables. Environment variables can be displayed in plain text in the CodeBuild console and AWS CLI.

    To store and retrieve sensitive values, we recommend your build commands use the AWS CLI to interact with the Amazon EC2 Systems Manager Parameter Store. The AWS CLI is already installed and configured on all build environments provided by CodeBuild. For more information, see Systems Manager Parameter Store and Systems Manager Parameter Store CLI Walkthrough in the Amazon EC2 Systems Manager User Guide

  20. For Buildspec, do one of the following:

    • If your source code includes a buildspec file, choose Use a buildspec file.

    • If your source code does not include a buildspec file, choose Insert build commands. For Build commands, enter the commands you want to run during the build phase in the build environment. For multiple commands, separate each command with && for Linux-based build environments or ; for Windows-based build environments. For Output files, enter the paths to the build output files in the build environment that you want to send to CodePipeline. For multiple files, separate each file path with a comma.

  21. Choose Create build project.

  22. Return to the CodePipeline console.

  23. 对于 Input artifacts (输入构件),选择您在此过程的前面记下的输出构件。

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

  25. 选择添加操作

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

  27. 选择 Release change

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

    注意

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

  29. 通过以下网址打开 Amazon S3 控制台:https://console.amazonaws.cn/s3/

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

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

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

  31. 打开与您的管道名称匹配的文件夹(根据管道名称的长度,文件夹名称可能被截断),然后打开与您在此过程的前面记下的 Output artifact (输出构件) 的值匹配的文件夹。

  32. 提取文件内容。如果该文件夹中有多个文件,请提取具有最新 Last Modified 时间戳的文件的内容。(您可能需要为文件提供 .zip 扩展名,以便您可以在系统的 ZIP 实用工具中使用它。) 构建输出项目位于文件的提取内容中。

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

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

  1. 使用以下项登录到 AWS 管理控制台:

    • 您的 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. https://console.amazonaws.cn/codesuite/codepipeline/home 中打开 CodePipeline 控制台。

  3. 在 AWS 区域选择器中,选择管道所在的 AWS 区域。这必须是支持 CodeBuild 的 AWS 区域。有关更多信息,请参阅 Amazon Web Services 一般参考 中的 AWS CodeBuild

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

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

    注意

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

  6. 选择 Edit (编辑)

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

    注意

    此过程向您演示如何在管道中紧接着 Source (源) 阶段添加测试阶段。要将测试操作添加到现有的阶段,请选择阶段中的 Edit stage (编辑阶段),然后跳到此过程的步骤 8。要在其他位置添加测试阶段,请在所需位置选择 Add stage (添加阶段)

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

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

    注意

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

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

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

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

    重要

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

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

  14. If a CodeBuild information page is displayed, choose Create build project. Otherwise, on the navigation pane, expand Build, choose Build projects, and then choose Create build project.

  15. For Project name, enter a name for this build project. Build project names must be unique across each AWS account.

  16. (Optional) Enter a description.

  17. For Environment, do one of the following:

    • To use a build environment based on a Docker image that is managed by CodeBuild, choose Managed image. Make your selections from the Operating system, Runtime, and Runtime version drop-down lists. For more information, see CodeBuild 提供的 Docker 映像.

    • To use a build environment based on a Docker image in an Amazon ECR repository in your AWS account, choose Custom image. For Environment type, choose an environment type, and then choose Amazon ECR. Use the Amazon ECR repository and Amazon ECR image drop-down lists to choose the Amazon ECR repository and Docker image in that repository.

    • To use a build environment based on a publicly available Docker image in Docker Hub, choose Other location. In Other location, enter the Docker image ID, using the format docker repository/docker-image-name.

    Select Privileged only if you plan to use this build project to build Docker images, and the build environment image you chose is not one provided by CodeBuild with Docker support. Otherwise, all associated builds that attempt to interact with the Docker daemon fail. You must also start the Docker daemon so that your builds can interact with it as needed. You can do this by running the following build commands to initialize the Docker daemon in the install phase of your buildspec. (Do not run the following build commands if you chose a build environment image provided by CodeBuild with Docker support.)

    - 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"
  18. In Service role, do one of the following:

    • If you do not have a CodeBuild service role, choose New service role. In Role name, enter a name for the new role.

    • If you have a CodeBuild service role, choose Existing service role. In Role ARN, choose the service role.

    注意

    When you use the console to create or update a build project, you can create a CodeBuild service role at the same time. By default, the role works with that build project only. If you use the console to associate this service role with another build project, the role is updated to work with the other build project. A service role can work with up to 10 build projects.

  19. Expand Additional configuration.

    To specify a build timeout other than 60 minutes (the default), use the hours and minutes boxes to set a timeout between 5 and 480 minutes (8 hours).

    For Compute, choose one of the available options.

    For Environment variables, use Name and Value to specify any optional environment variables for the build environment to use. To add more environment variables, choose Add environment variable.

    重要

    We strongly discourage storing sensitive values, especially AWS access key IDs and secret access keys, in environment variables. Environment variables can be displayed in plain text in the CodeBuild console and AWS CLI.

    To store and retrieve sensitive values, we recommend your build commands use the AWS CLI to interact with the Amazon EC2 Systems Manager Parameter Store. The AWS CLI is already installed and configured on all build environments provided by CodeBuild. For more information, see Systems Manager Parameter Store and Systems Manager Parameter Store CLI Walkthrough in the Amazon EC2 Systems Manager User Guide

  20. For Buildspec, do one of the following:

    • If your source code includes a buildspec file, choose Use a buildspec file.

    • If your source code does not include a buildspec file, choose Insert build commands. For Build commands, enter the commands you want to run during the build phase in the build environment. For multiple commands, separate each command with && for Linux-based build environments or ; for Windows-based build environments. For Output files, enter the paths to the build output files in the build environment that you want to send to CodePipeline. For multiple files, separate each file path with a comma.

  21. Choose Create build project.

  22. Return to the CodePipeline console.

  23. 对于 Input artifacts (输入构件),选择您在此过程的前面记下的 Output artifact (输出构件) 的值。

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

  25. 选择 Save (保存)

  26. 选择 Release change

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

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

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

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