チュートリアル: AWS Device Farm で Android アプリケーションを構築してテストするパイプラインを作成する
コミットがプッシュされるたびにアプリケーションが構築され、テストされる継続的統合フローを構成するために AWS CodePipeline を使用できます。このチュートリアルでは、GitHub リポジトリのソースコードを使って Android アプリをビルドしてテストするパイプラインを作成して設定する方法を説明します。パイプラインは新しい GitHub コミットの到着を検出し、CodeBuild を使用してアプリケーションを構築し、Device Farm を使用してテストします。
重要
コンソールでのパイプライン作成の一環として、CodePipeline は S3 アーティファクトバケットをアーティファクトとして使用します (これは S3 ソースアクションで使用するバケットとは異なります)。S3 アーティファクトバケットがパイプラインのアカウントとは異なるアカウントにある場合は、S3 アーティファクトバケットを所有している AWS アカウントが安全で信頼できることを確認してください。
重要
この手順でパイプラインに追加するアクションの多くは、パイプラインを作成する前に作成する必要がある AWS リソースを含んでいます。ソースアクションの AWS リソースは、パイプラインを作成するときは、常に同じ AWS リージョンに作成する必要があります。例えば、米国東部 (オハイオ) リージョンにパイプラインを作成している場合、CodeCommit リポジトリは米国東部 (オハイオ) リージョンにある必要があります。
パイプラインを作成するときにクロスリージョンアクションを追加できます。クロスリージョンアクションの AWS リソースはアクションを実行する予定の AWS リージョンと同じであることが必要です。詳細については、「CodePipeline にクロスリージョンアクションを追加する」を参照してください。
既存の Android アプリとテスト定義を使用してこれを試すか、 Device Farmが提供したサンプルアプリケーションとテスト定義
注記
開始する前に
-
AWS Device Farm コンソールにサインインし、[Create a new project (新規プロジェクトの作成)] を選択します。
-
プロジェクトを選択します。ブラウザで、新しいプロジェクトの URL をコピーします。URL には、プロジェクト ID が含まれます。
-
プロジェクト 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 を設定します。
-
アプリケーションのコードのルートに
buildspec.ymlという名前のファイルを追加してコミットし、リポジトリにプッシュします。CodeBuild は、このファイルを使用してコマンドを実行し、アプリケーションを構築するために必要なアーティファクトにアクセスします。version: 0.2 phases: build: commands: - chmod +x ./gradlew - ./gradlew assembleDebug artifacts: files: - './android/app/build/outputs/**/*.apk' discard-paths: yes -
(オプション) Calabash または Appium を使用してアプリケーションをテストする場合は、テスト定義ファイルをリポジトリに追加します。後のステップで、定義を使用してテストスイートを実行するように Device Farm を設定できます。
Device Farm の組み込みのテストを使用する場合は、このステップを省略できます。
-
パイプラインを作成してソースステージを追加するには、以下の手順を実行します。
AWS マネジメントコンソール にサインインして、https://console.aws.amazon.com/codepipeline/
で CodePipeline コンソールを開きます。 -
[ようこそ] ページ、[開始方法] ページ、または [パイプライン] ページで、[パイプラインの作成] を選択します。
-
[ステップ 1: 作成オプションを選択する] ページの [作成オプション] で、[カスタムパイプラインを構築する] オプションを選択します。[次へ] を選択します。
-
[ステップ 2: パイプラインの設定を選択する] ページで、[パイプライン名] にパイプラインの名前を入力します。
-
CodePipeline は、特徴と料金が異なる V1 タイプと V2 タイプのパイプラインを提供しています。V2 タイプは、コンソールで選択できる唯一のタイプです。詳細については、「パイプラインタイプ」を参照してください。CodePipeline の料金については、料金
を参照してください。 -
[サービスロール] で、[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": "*" } -
[詳細設定] をデフォルト設定のままにし、[次へ] を選択します。
-
[ステップ 3: ソースステージの追加] ページの [ソースプロバイダー] で、[GitHub (GitHub アプリ経由)] を選択します。
-
接続 で、既存の接続を選択するか、新規の接続を作成します。GitHub ソースアクション用の接続を作成または管理するには、「GitHub コネクション」を参照してください。
-
[リポジトリ] で、ソースリポジトリを選択します。
-
[ブランチ] で、使用するブランチを選択します。
-
ソースアクションの残りはデフォルトのままにしておきます。[次へ] を選択します。
-
[ステップ 4: ビルドステージの追加] で、ビルドステージを追加します。
-
[プロバイダーを構築する] で、[その他のビルドプロバイダー]、[AWS CodeBuild] の順に選択します。[リージョン] をデフォルトでパイプラインのリージョンにすることを許可します。
-
[プロジェクトを作成] を選択します。
-
[プロジェクト名] に、このビルドプロジェクトの名前を入力します。
-
[環境イメージ] で、[Managed image (マネージド型イメージ)] を選択します。[Operating system] で、[Ubuntu] を選択します。
-
[ランタイム] で、[Standard (標準)] を選択します。[イメージ] で、[aws/codebuild/standard:5.0] を選択します。
CodeBuild は、Android Studio がインストールされているこの OS イメージを使用してアプリケーションを構築します。
-
サービスロール で、既存の CodeBuild サービスロールを選択するか、新しいサービスロールを作成します。
-
[ビルド仕様] で、[Use a buildspec file (ビルド仕様ファイルの使用)] を選択します。
-
[Continue to CodePipeline ] (CodePipeline に進む) を選択します。これにより、CodePipeline コンソールに戻り、設定用にリポジトリ内の
buildspec.ymlを使用する CodeBuild プロジェクトが作成されます。ビルドプロジェクトでは、サービスロールを使用して AWS のサービス のアクセス許可を管理します。このステップには数分かかる場合があります。 -
[次へ] を選択します。
-
-
[ステップ 5: テストステージの追加] で、[テストステージをスキップ] を選択し、もう一度 [スキップ] を選択して警告メッセージを受け入れます。
[次へ] を選択します。
-
[ステップ 6: デプロイステージの追加] ページで、[デプロイステージをスキップ] を選択し、もう一度 [スキップ] を選択して警告メッセージを受け入れます。[次へ] を選択します。
-
[ステップ 7: レビュー] で、[パイプラインを作成する] を選択します。ソースとビルドステージを示す図が表示されます。
-
パイプラインに Device Farm テストアクションを追加します。
-
右上の [編集] を選択します。
-
図の最下部で [+ Add stage] (+ ステージの追加) を選択します。[ステージ名] に名前 (
Testなど) を入力します。 -
[+ Add action group (+ アクションの追加)] を選択します。
-
[アクション名] に名前を入力します。
-
アクションプロバイダ で、AWS Device Farm を選択します。[リージョン] をデフォルトでパイプラインのリージョンにすることを許可します。
-
[入力アーティファクト] で、テストステージに先立つステージの出力アーティファクトと一致する入力アーティファクト (
BuildArtifactなど) を選択します。AWS CodePipeline コンソールでは、パイプライン図の情報アイコンの上にカーソルを置くことで、各ステージの出力アーティファクトの名前を見つけることができます。パイプラインでアプリケーションを [ソース] ステージから直接テストする場合は、[SourceArtifact] を選択します。パイプラインに [ビルド] ステージが含まれている場合は、[BuildArtifact] を選択します。
-
ProjectId に、Device Farm プロジェクト ID を入力します。このチュートリアルの最初の手順に従い、プロジェクト ID を取得します。
-
[DevicePoolArn] に、デバイスプールの ARN を入力します。トップデバイスの ARN を含む、プロジェクトで使用可能なデバイスプール ARN を取得するには、AWS CLI を使用して次のコマンドを入力します。
aws devicefarm list-device-pools --arn arn:aws:devicefarm:us-west-2:account_ID:project:project_ID -
[AppType] に、「Android」と入力します。
[AppType] の有効な値は次のとおりです。
-
iOS -
-
Android -
-
Web
-
-
[デプロイ] に、コンパイルされたアプリケーションパッケージのパスを入力します。パスは、テストステージの入力アーティファクトのルートを基準とする相対パスです。このパスは
app-release.apkに似ています。 -
TestType にテストのタイプを入力し、Test にテスト定義ファイルのパスを入力します。パスは、テストの入力アーティファクトのルートに関連します。
[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
注記
カスタム環境ノードはサポートされていません。
-
-
残りのフィールドにはテストおよびアプリケーションタイプに適した構成を入力します。
-
(オプション) [アドバンスト] で、テストランの情報の設定を行います。
-
[保存] を選択します。
-
編集中のステージで、[完了] を選択します。AWS CodePipeline のペインで [保存] を選択し、警告メッセージで [保存] を選択します。
-
変更を送信してパイプラインのビルドを開始するには、[変更をリリース]、[リリース] の順に選択します。
-