教程:创建用于构建和测试您的 Android 应用程序的管道 AWS Device Farm - AWS CodePipeline

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

教程:创建用于构建和测试您的 Android 应用程序的管道 AWS Device Farm

您可以使用 AWS CodePipeline 来配置持续集成流程,每次推送提交时,都将在该流程中构建和测试您的应用程序。本教程介绍如何创建和配置管道,以便使用 GitHub 存储库中的源代码构建和测试您的 Android 应用程序。管道会检测到新 GitHub 提交的CodeBuild到来,然后使用构建应用程序,并使用Device Far m对其进行测试。

重要

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

重要

在此过程中,您在管道中添加的许多操作都涉及在创建管道之前需要创建的 AWS 资源。 AWS 源操作的资源必须始终在您创建管道的同一 AWS 区域创建。例如,如果您在美国东部(俄亥俄州)地区创建管道,则您的 CodeCommit 存储库必须位于美国东部(俄亥俄州)区域。

您可以在创建管道时添加跨区域操作。 AWS 跨区域操作的资源必须位于您计划执行操作的同一 AWS 区域。有关更多信息,请参阅 在中添加跨区域操作 CodePipeline

您可以使用现有的 Android 应用程序和测试定义或使用 Device Farm 提供的示例应用程序和测试定义进行此尝试。

注意

开始之前

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

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

  3. 复制并保留此项目 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 测试

  1. 在应用程序代码的根目录buildspec.yml中添加并提交一个名为的文件,然后将其推送到存储库。 CodeBuild 使用此文件执行构建应用程序所需的命令和访问构件。

    version: 0.2 phases: build: commands: - chmod +x ./gradlew - ./gradlew assembleDebug artifacts: files: - './android/app/build/outputs/**/*.apk' discard-paths: yes
  2. (可选)如果使用 Calabash 或 Appium 测试应用程序,请将测试定义文件添加到存储库。在后续步骤中,可将 Device Farm 配置为使用定义来执行测试套件。

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

  3. 要创建管道并添加一个源阶段,请执行以下操作:

    1. 登录 AWS Management Console 并打开 CodePipeline 控制台,网址为https://console.aws.amazon.com/codepipeline/

    2. 选择 Create pipeline(创建管道)。在步骤 1:选择管道设置页面上,在管道名称中,输入管道的名称。

    3. 管道类型中,选择 V2。有关更多信息,请参阅 管道类型。选择下一步

    4. 服务角色中,将新建服务角色保持选中状态,并将角色名称保持不变。您还可以选择使用现有服务角色(如果已有)。

      注意

      如果您使用在 2018 年 7 月之前创建的 CodePipeline 服务角色,则需要为 Device Farm 添加权限。为此,请打开IAM控制台,找到该角色,然后将以下权限添加到该角色的策略中。有关更多信息,请参阅 向 CodePipeline 服务角色添加权限

      { "Effect": "Allow", "Action": [ "devicefarm:ListProjects", "devicefarm:ListDevicePools", "devicefarm:GetRun", "devicefarm:GetUpload", "devicefarm:CreateUpload", "devicefarm:ScheduleRun" ], "Resource": "*" }
    5. 高级设置中的各项设置保留为默认值,然后选择下一步

    6. 在 “步骤 2:添加源舞台” 页面上,在源提供程序中,选择GitHub

    7. 连接下,选择一个现有连接或创建一个新连接。要创建或管理 GitHub 源操作的连接,请参阅GitHub 连接

    8. 存储库中选择源存储库。

    9. 分支中选择要使用的分支。

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

  4. 添加构建阶段,添加一个构建阶段:

    1. 构建提供程序中,选择 AWS CodeBuild。允许区域默认为管道区域。

    2. 选择创建项目

    3. 项目名称中,输入此构建项目的名称。

    4. 环境映像中,选择托管映像。对于操作系统,选择 Ubuntu

    5. 对于运行时,选择标准。对于映像,选择 aws/codebuild/standard:5.0

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

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

    7. 对于构建规范,选择使用 buildspec 文件

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

    9. 选择下一步

  5. 步骤 4:添加部署阶段页面上,选择跳过部署阶段,并通过再次选择跳过接受警告消息。选择下一步

  6. 步骤 5:审核中,选择创建管道。您应看到一个显示源和构建阶段的示意图。

  7. 将 Device Farm 测试操作添加到管道:

    1. 在右上角,选择编辑

    2. 在示意图底部,选择 + 添加阶段。在阶段名称中,输入名称,例如 Test

    3. 选择 + 添加操作组

    4. 操作名称中输入名称。

    5. 操作提供程序中,选择 AWS Device Farm。允许区域默认为管道区域。

    6. 输入构件中,选择与测试阶段之前的那个阶段的输出构件相匹配的输入构件,例如 BuildArtifact

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

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

    8. 在中 DevicePoolArn,ARN输入设备池的。要获取项目的可用设备池ARNs,包括顶级设备ARN的, AWS CLI请使用输入以下命令:

      aws devicefarm list-device-pools --arn arn:aws:devicefarm:us-west-2:account_ID:project:project_ID
    9. 在中 AppType,输入安卓

      以下是的有效值列表 AppType

      • iOS

      • Android

      • Web

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

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

      以下是的有效值列表 TestType

      • APPIUM_JAVA_JUNIT

      • APPIUM_JAVA_TESTNG

      • APPIUM_NODE

      • APPIUM_RUBY

      • APPIUM_PYTHON

      • APPIUM_WEB_JAVA_JUNIT

      • APPIUM_WEB_JAVA_TESTNG

      • APPIUM_WEB_NODE

      • APPIUM_WEB_RUBY

      • APPIUM_WEB_PYTHON

      • BUILTIN_FUZZ

      • INSTRUMENTATION

      • XCTEST

      • XCTEST_UI

      注意

      不支持自定义环境节点。

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

    13. (可选)在高级中,为测试运行提供配置信息。

    14. 选择保存

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

    16. 要提交所做的更改并开始管道构建,请选择发布更改,然后选择发布