チュートリアル: AWS Device Farm で iOS アプリケーションをテストするパイプラインを作成する - AWS CodePipeline

チュートリアル: AWS Device Farm で iOS アプリケーションをテストするパイプラインを作成する

AWS CodePipeline を使用し、ソースバケットが変更されるたびにアプリがテストされる継続的な統合フローを簡単に設定できます。このチュートリアルでは、S3 バケットからビルドした iOS アプリをテストするためのパイプラインを作成して設定する方法を示します。パイプラインは保存された変更の到着を Amazon CloudWatch Events を介して検出し、構築したアプリケーションをテストするために Device Farm を使用します。

重要

パイプライン作成の一環として、CodePipeline は、ユーザーが指定した S3 アーティファクトバケットをアーティファクトとして使用します (これは S3 ソースアクションで使用するバケットとは異なります)。S3 アーティファクトバケットがパイプラインのアカウントとは異なるアカウントにある場合は、S3 アーティファクトバケットを所有している AWS アカウントが安全で信頼できることを確認してください。

重要

この手順でパイプラインに追加するアクションの多くは、パイプラインを作成する前に作成する必要がある AWS リソースを含んでいます。ソースアクションの AWS リソースは、パイプラインを作成するときは、常に同じ AWS リージョンに作成する必要があります。例えば、米国東部 (オハイオ) リージョンにパイプラインを作成している場合、CodeCommit リポジトリは米国東部 (オハイオ) リージョンにある必要があります。

パイプラインを作成するときにクロスリージョンアクションを追加できます。クロスリージョンアクションの AWS リソースはアクションを実行する予定の AWS リージョンと同じであることが必要です。詳細については、「CodePipeline にクロスリージョンアクションを追加する」を参照してください。

既存の iOS アプリを使用して試してみるか、サンプル iOS アプリを使用できます。

注記

開始する前に

  1. AWS Device Farm コンソールにサインインし、[Create a new project (新規プロジェクトの作成)] を選択します。

  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

Device Farm テスト(例 Amazon S3) を使用するように CodePipeline を設定する

  1. バージョニングが有効になっている S3 バケットを作成するか、使用します。「ステップ 1: アプリケーションの S3 バケットを作成する」の手順に従って、S3 バケットを作成します。

  2. バケットの Amazon S3 コンソールで、アップロード を選択し、指示に従って、zip ファイルをアップロードします。

    サンプルアプリケーションは、.zip ファイルにパッケージ化する必要があります。

  3. パイプラインを作成してソースステージを追加するには、以下の手順を実行します。

    1. AWS マネジメントコンソール にサインインして、https://console.aws.amazon.com/codepipeline/ で CodePipeline コンソールを開きます。

    2. [ようこそ] ページ、[開始方法] ページ、または [パイプライン] ページで、[パイプラインの作成] を選択します。

    3. [ステップ 1: 作成オプションを選択する] ページの [作成オプション] で、[カスタムパイプラインを構築する] オプションを選択します。[次へ] を選択します。

    4. [ステップ 2: パイプラインの設定を選択する] ページで、[パイプライン名] にパイプラインの名前を入力します。

    5. CodePipeline は、特徴と料金が異なる V1 タイプと V2 タイプのパイプラインを提供しています。V2 タイプは、コンソールで選択できる唯一のタイプです。詳細については、「パイプラインタイプ」を参照してください。CodePipeline の料金については、料金を参照してください。

    6. [サービスロール] で、[New service role (新しいサービスロール)] は選択したままにして、[Role name (ロール名)] は変更しません。既存のサービスロール (ある場合) を使用することもできます。

      注記

      2018 年 7 月以前に作成した CodePipeline サービスロールを使用している場合、Device Farm に対する許可を追加する必要があります。これを行うには、IAM コンソールを開き、ロールを見つけて、ロールのポリシーに次の許可を追加します。詳細については、「CodePipeline サービスロールにアクセス許可を追加する」を参照してください。

      { "Effect": "Allow", "Action": [ "devicefarm:ListProjects", "devicefarm:ListDevicePools", "devicefarm:GetRun", "devicefarm:GetUpload", "devicefarm:CreateUpload", "devicefarm:ScheduleRun" ], "Resource": "*" }
    7. [詳細設定] をデフォルト設定のままにし、[次へ] を選択します。

    8. [ステップ 3: ソースステージの追加] ページの [ソースプロバイダー] で、[Amazon S3] を選択します。

    9. [Amazon S3 の場所] に、.zip ファイルのバケット (my-storage-bucket など) とオブジェクトキー (s3-ios-test-1.zip など) を入力します。

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

  4. [ステップ 4: ビルドステージの追加] で、パイプラインのプレースホルダービルドステージを作成します。これにより、ウィザードでパイプラインを作成することができます。ウィザードを使用して 2 ステージパイプラインを作成した後は、このプレースホルダービルドステージは不要になります。パイプラインが完了した後、この第 2 ステージが削除され、ステップ 5 で新しいテストステージが追加されます。

    1. [ビルドプロバイダ] で、[Jenkins の追加] を選択します。このビルド選択はプレースホルダーです。それは使用されていません。

    2. [プロバイダ名] に名前を入力します。名前はプレースホルダーです。それは使用されていません。

    3. [サーバー URL] にテキストを入力します。テキストはプレースホルダーです。それは使用されていません。

    4. [プロジェクト名] に名前を入力します。名前はプレースホルダーです。それは使用されていません。

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

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

      [次へ] を選択します。

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

    8. [ステップ 7: レビュー] で、[パイプラインを作成する] を選択します。ソースとビルドステージを示す図が表示されます。

      パイプラインを表示します。
  5. 次のようにして、Device Farm テストアクションをパイプラインに追加します。

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

    2. [Edit stage (ステージの編集)] を選択します。[削除] を選択します。これにより、パイプライン作成のためには使用しないプレースホルダーステージが削除されます。

    3. 図の最下部で [+ Add stage] (+ ステージの追加) を選択します。

    4. [ステージ名] にステージ名 (Test など) を入力し、[Add stage (ステージの追加)] を選択します。

    5. [+ Add action group (+ アクションの追加)] を選択します。

    6. [アクション名] に、名前を入力します (DeviceFarmTest など)。

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

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

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

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

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

      aws devicefarm list-device-pools --arn arn:aws:devicefarm:us-west-2:account_ID:project:project_ID
    11. [AppType] に、「iOS」と入力します。

      [AppType] の有効な値は次のとおりです。

      • iOS -

      • Android -

      • Web

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

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

      Device Farm の組み込みテストのいずれかを使用している場合は、BUILTIN_FUZZ など Device Farm プロジェクトに設定されたテストのタイプを入力します。[FuzzEventCount] に、時間をミリ秒単位で入力します (6000 など)。[FuzzEventThrottle] に、時間をミリ秒単位で入力します (50 など)。

      Device Farm の組み込みテストのいずれも使用していない場合は、テストのタイプを入力し、テスト にテスト定義ファイルのパスを入力します。パスは、テストの入力アーティファクトのルートに関連します。

      [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_FUZZZ

      • INSTRUMENTATION

      • XCTEST

      • XCTEST_UI

      注記

      カスタム環境ノードはサポートされていません。

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

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

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

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

    18. 変更を送信してパイプラインの実行を開始するには、[変更のリリース]、[リリース] の順に選択します。