

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

# 教程：创建用于构建和测试您的 Android 应用程序的管道 AWS Device Farm
<a name="tutorials-codebuild-devicefarm"></a>

您可以使用 AWS CodePipeline 来配置持续集成流程，每次推送提交时，都将在该流程中构建和测试您的应用程序。本教程介绍如何使用 GitHub 存储库中的源代码创建和配置管道，以构建和测试您的 Android 应用程序。管道会检测到新 GitHub 提交的[CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)到来，然后使用构建应用程序，并使用Device [Far](https://docs.aws.amazon.com/devicefarm/latest/developerguide/welcome.html) m对其进行测试。

**重要**  
作为在控制台中创建管道的一部分，S3 工件存储桶将 CodePipeline用于项目。（这与用于 S3 源操作的存储桶不同。） 如果 S3 工件存储桶与您的管道账户位于不同的账户中，请确保 S3 工件存储桶归其所有 AWS 账户 ，该存储桶是安全且可靠的。

**重要**  
在此过程中，您在管道中添加的许多操作都涉及在创建管道之前需要创建的 AWS 资源。 AWS 源操作的资源必须始终在您创建管道的同一 AWS 区域创建。例如，如果您在美国东部（俄亥俄州）地区创建管道，则您的 CodeCommit 存储库必须位于美国东部（俄亥俄州）区域。  
您可以在创建管道时添加跨区域操作。 AWS 跨区域操作的资源必须位于您计划执行操作的同一 AWS 区域。有关更多信息，请参阅 [在中添加跨区域操作 CodePipeline](actions-create-cross-region.md)。

您可以使用现有的 Android 应用程序和测试定义或使用 [Device Farm 提供的示例应用程序和测试定义](https://github.com/aws-samples/aws-device-farm-sample-app-for-android)进行此尝试。

**开始之前**

1. 登录 AWS Device Farm 控制台并选择**创建新项目**。

1. 选择您的项目。在浏览器中，复制新项目的 URL。URL 包含项目 ID。

1. 复制并保留此项目 ID。在 CodePipeline 中创建管道时要使用它。

   以下是项目的示例 URL。要提取项目 ID，请复制 `projects/` 之后的值。在此示例中，项目 ID 为 `eec4905f-98f8-40aa-9afc-4c1cfexample`。

   ```
   https://<region-URL>/devicefarm/home?region=us-west-2#/projects/eec4905f-98f8-40aa-9afc-4c1cfexample/runs
   ```

## 配置 CodePipeline 为使用您的 Device Farm 测试
<a name="codepipeline-configure-tests"></a>

1. 

   在应用程序代码的根目录[https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html)中添加并提交一个名为的文件，然后将其推送到存储库。 CodeBuild 使用此文件执行构建应用程序所需的命令和访问构件。

   ```
   version: 0.2
   
   phases:
     build:
       commands:
         - chmod +x ./gradlew
         - ./gradlew assembleDebug
   artifacts:
     files:
        - './android/app/build/outputs/**/*.apk'
     discard-paths: yes
   ```

1. （可选）如果[使用 Calabash 或 Appium 测试应用程序](https://docs.aws.amazon.com/devicefarm/latest/developerguide/test-types-intro.html)，请将测试定义文件添加到存储库。在后续步骤中，可将 Device Farm 配置为使用定义来执行测试套件。

   如果使用 Device Farm 内置测试，可跳过此步骤。

1. 要创建管道并添加一个源阶段，请执行以下操作：

   1. 登录 AWS 管理控制台 并打开 CodePipeline 控制台，网址为[https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/)。

   1. 在**欢迎**页面、**入门**页面或**管道**页面上，选择**创建管道**。

   1. 在**步骤 1：选择创建选项**页面上的**创建选项**下，选择**构建自定义管道**选项。选择**下一步**。

   1. 在**步骤 2：选择管道设置**页面上，在**管道名称**中，输入管道的名称。

   1. CodePipeline 提供 V1 和 V2 类型的管道，它们的特性和价格各不相同。在控制台中，您只能选择 V2 类型。有关更多信息，请参阅[管道类型](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types-planning.html?icmpid=docs_acp_help_panel)。有关定价的信息 CodePipeline，请参阅[定价](https://aws.amazon.com/codepipeline/pricing/)。

   1. 在**服务角色**中，将**新建服务角色**保持选中状态，并将**角色名称**保持不变。您还可以选择使用现有服务角色（如果已有）。
**注意**  
如果您使用在 2018 年 7 月之前创建的 CodePipeline 服务角色，则需要为 Device Farm 添加权限。要执行此操作，请打开 IAM 控制台，找到该角色，然后向该角色的策略添加以下权限。有关更多信息，请参阅 [为 CodePipeline 服务角色添加权限](how-to-custom-role.md#how-to-update-role-new-services)。  

      ```
      {
           "Effect": "Allow",
           "Action": [
              "devicefarm:ListProjects",
              "devicefarm:ListDevicePools",
              "devicefarm:GetRun",
              "devicefarm:GetUpload",
              "devicefarm:CreateUpload",
              "devicefarm:ScheduleRun"
           ],
           "Resource": "*"
      }
      ```

   1. 将**高级设置**中的各项设置保留为默认值，然后选择**下一步**。

   1. 在 “**步骤 3：添加源舞台**” 页面上，在**源提供程序**中，选择 **GitHub （通过 GitHub 应用程序）**。

   1. 在**连接**下，选择一个现有连接或创建一个新连接。要创建或管理 GitHub 源操作的连接，请参阅[GitHub 连接](connections-github.md)。

   1. 在**存储库**中选择源存储库。

   1. 在**分支**中选择要使用的分支。

   1. 保留源操作的其余默认值。选择**下一步**。

1. 在**步骤 4：添加构建阶段**中，添加一个构建阶段：

   1. 在**构建提供程序**中，选择**其他构建提供程序**，然后选择 **AWS CodeBuild**。允许**区域**默认为管道区域。

   1. 选择**创建项目**。

   1. 在**项目名称**中，输入此构建项目的名称。

   1. 在**环境映像**中，选择**托管映像**。对于**操作系统**，选择 **Ubuntu**。

   1. 对于**运行时**，选择**标准**。**对于 “**图像**”，选择:5.0 aws/codebuild/standard。**

      CodeBuild 使用此安装了 Android Studio 的操作系统映像来构建您的应用程序。

   1. 对于**服务角色**，请选择您现有的 CodeBuild 服务角色或创建一个新的服务角色。

   1. 对于**构建规范**，选择**使用 buildspec 文件**。

   1. 选择 “**继续” CodePipeline**。这将返回到 CodePipeline控制台并创建一个使用存储库`buildspec.yml`中的进行配置的 CodeBuild 项目。该构建项目使用服务角色来管理 AWS 服务 权限。此步骤可能需要几分钟时间。

   1. 选择**下一步**。

1. 在**步骤 5：添加测试阶段**中，选择**跳过测试阶段**，并通过再次选择**跳过**接受警告消息。

   选择**下一步**。

1. 在 “**步骤 6：添加部署阶段**” 页上，选择 “**跳过部署阶段**”，然后再次选择 “**跳过**”，接受警告消息。选择**下一步**。

1. 在 “**步骤 7：查看**” 中，选择 “**创建管道**”。您应看到一个显示源和构建阶段的示意图。

1. 将 Device Farm 测试操作添加到管道：

   1. 在右上角，选择**编辑**。

   1. 在示意图底部，选择 **\$1 添加阶段**。在**阶段名称**中，输入名称，例如 **Test**。

   1. 选择 **\$1 添加操作组**。

   1. 在**操作名称**中输入名称。

   1. 在**操作提供程序**中，选择 **AWS Device Farm**。允许**区域**默认为管道区域。

   1. 在**输入构件**中，选择与测试阶段之前的那个阶段的输出构件相匹配的输入构件，例如 `BuildArtifact`。

      在 AWS CodePipeline 控制台中，将鼠标悬停在管道图中的信息图标上，可以找到每个阶段的输出工件的名称。如果您的管道直接从 S **ourc** e 阶段测试您的应用程序，请选择**SourceArtifact**。如果管道包含 “构**建**” 阶段，请选择**BuildArtifact**。

   1. 在中 **ProjectId**，输入您的 Device Farm 项目 ID。使用本教程开头的步骤来检索您的项目 ID。

   1. 在中 **DevicePoolArn**，输入设备池的 ARN。要获取项目的可用设备池 ARNs ，包括热门设备的 ARN，请使用 CL AWS I 输入以下命令：

      ```
      aws devicefarm list-device-pools --arn arn:aws:devicefarm:us-west-2:account_ID:project:project_ID
      ```

   1. 在中 **AppType**，输入**安卓**。

      以下是 **AppType** 的有效值列表：
      + **iOS**
      + **Android**
      + **Web**

   1. 在 **App** 中，输入已编译的应用程序包的路径。该路径相对于测试阶段的输入构件的根。通常，此路径类似于 `app-release.apk`。

   1. 在中 **TestType**，输入您的测试类型，然后在**测试**中输入测试定义文件的路径。路径相对于测试的输入项目的根。

      以下是 **TestType** 的有效值列表：
      + **APPIUM\$1JAVA\$1JUNIT**
      + **APPIUM\$1JAVA\$1TESTNG**
      + **APPIUM\$1NODE**
      + **APPIUM\$1RUBY**
      + **APPIUM\$1PYTHON**
      + **APPIUM\$1WEB\$1JAVA\$1JUNIT**
      + **APPIUM\$1WEB\$1JAVA\$1TESTNG**
      + **APPIUM\$1WEB\$1NODE**
      + **APPIUM\$1WEB\$1RUBY**
      + **APPIUM\$1WEB\$1PYTHON**
      + **BUILTIN\$1FUZZ**
      + **INSTRUMENTATION**
      + **XCTEST**
      + **XCTEST\$1UI**
**注意**  
不支持自定义环境节点。

   1. 在其余字段中，提供适合测试和应用程序类型的配置。

   1. （可选）在**高级**中，为测试运行提供配置信息。

   1. 选择**保存**。

   1. 在所编辑的阶段上，选择**完成**。在 AWS CodePipeline 窗格中，选择**保存**，然后选择警告消息上的**保存**。

   1. 要提交所做的更改并开始管道构建，请选择**发布更改**，然后选择**发布**。