

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# チュートリアル: を使用して 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 Farm](https://docs.aws.amazon.com/devicefarm/latest/developerguide/welcome.html) を使用してテストします。

**重要**  
コンソールでのパイプライン作成の一環として、CodePipeline は S3 アーティファクトバケットをアーティファクトとして使用します (これは 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
   ```

## Device Farm テストを使用するように CodePipeline を設定します。
<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 マネジメントコンソール し、[https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/) で 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. [**サービスロール**] で、[**New service role (新しいサービスロール)**] は選択したままにして、[**Role name (ロール名)**] は変更しません。既存のサービスロール (ある場合) を使用することもできます。
**注記**  
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. [**環境イメージ**] で、[**Managed image (マネージド型イメージ)**] を選択します。[**Operating system**] で、[**Ubuntu**] を選択します。

   1. [**ランタイム**] で、[**Standard (標準)**] を選択します。[**イメージ**] で、[**aws/codebuild/standard:5.0**] を選択します。

      CodeBuild は、Android Studio がインストールされているこの OS イメージを使用してアプリケーションを構築します。

   1. **サービスロール** で、既存の CodeBuild サービスロールを選択するか、新しいサービスロールを作成します。

   1. [**ビルド仕様**] で、[**Use a buildspec file (ビルド仕様ファイルの使用)**] を選択します。

   1. [**Continue to CodePipeline **] (CodePipeline に進む) を選択します。これにより、CodePipeline コンソールに戻り、設定用にリポジトリ内の `buildspec.yml` を使用する CodeBuild プロジェクトが作成されます。ビルドプロジェクトでは、サービスロールを使用して AWS のサービス のアクセス許可を管理します。このステップには数分かかる場合があります。

   1. [**次へ**] を選択します。

1. **[ステップ 5: テストステージの追加]** で、**[テストステージをスキップ]** を選択し、もう一度 **[スキップ]** を選択して警告メッセージを受け入れます。

   [**次へ**] を選択します。

1. **[ステップ 6: デプロイステージの追加]** ページで、**[デプロイステージをスキップ]** を選択し、もう一度 **[スキップ]** を選択して警告メッセージを受け入れます。[**次へ**] を選択します。

1. **ステップ 7: 確認**で、**パイプラインの作成**を選択します。ソースとビルドステージを示す図が表示されます。

1. パイプラインに Device Farm テストアクションを追加します。

   1. 右上の [**編集**] を選択します。

   1. 図の最下部で [**\$1 Add stage]** (\$1 ステージの追加) を選択します。[**ステージ名**] に名前 (**Test** など) を入力します。

   1. [**\$1 Add action group (\$1 アクションの追加)**] を選択します。

   1. **[アクション名]** に名前を入力します。

   1. **アクションプロバイダ** で、**AWS Device Farm** を選択します。**[リージョン]** をデフォルトでパイプラインのリージョンにすることを許可します。

   1. [**入力アーティファクト**] で、テストステージに先立つステージの出力アーティファクトと一致する入力アーティファクト (`BuildArtifact` など) を選択します。

       AWS CodePipeline コンソールでは、パイプライン図の情報アイコンにカーソルを合わせると、各ステージの出力アーティファクトの名前を確認できます。パイプラインでアプリケーションを [**ソース**] ステージから直接テストする場合は、[**SourceArtifact**] を選択します。パイプラインに [**ビルド**] ステージが含まれている場合は、[**BuildArtifact**] を選択します。

   1. **ProjectId** に、Device Farm プロジェクト ID を入力します。このチュートリアルの最初の手順に従い、プロジェクト ID を取得します。

   1. [**DevicePoolArn**] に、デバイスプールの ARN を入力します。上位デバイスの ARNs など、プロジェクトの使用可能なデバイスプール ARN を取得するには、 CLI AWS を使用して次のコマンドを入力します。

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

   1. [**AppType**] に、「**Android**」と入力します。

      [**AppType**] の有効な値は次のとおりです。
      + **iOS**
      + **Android**
      + **Web**

   1. [**デプロイ**] に、コンパイルされたアプリケーションパッケージのパスを入力します。パスは、テストステージの入力アーティファクトのルートを基準とする相対パスです。このパスは `app-release.apk` に似ています。

   1. **TestType** にテストのタイプを入力し、**Test** にテスト定義ファイルのパスを入力します。パスは、テストの入力アーティファクトのルートに関連します。

      [**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\$1FUZZZ**
      + **INSTRUMENTATION**
      + **XCTEST**
      + **XCTEST\$1UI**
**注記**  
カスタム環境ノードはサポートされていません。

   1. 残りのフィールドにはテストおよびアプリケーションタイプに適した構成を入力します。

   1. (オプション) [**アドバンスト**] で、テストランの情報の設定を行います。

   1. **[保存]** を選択します。

   1. 編集中のステージで、[**完了**] を選択します。 AWS CodePipeline のペインで [**保存**] を選択し、警告メッセージで [**保存**] を選択します。

   1. 変更を送信してパイプラインのビルドを開始するには、**[変更をリリース]**、**[リリース]** の順に選択します。