教學課程:建立管道,使用 建置和測試您的 Android 應用程式 AWS Device Farm - AWS CodePipeline

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

教學課程:建立管道,使用 建置和測試您的 Android 應用程式 AWS Device Farm

您可以使用 AWS CodePipeline 來設定持續整合流程,在每次推送遞交時,在其中建置和測試您的應用程式。本教學會示範如何建立及設定管道,使用 GitHub 儲存庫中的來源碼建置及測試您的 Android 應用程式。管道會偵測新 GitHub 遞交的到達,然後使用 CodeBuild 建置應用程式和 Device Farm 進行測試。

重要

在 主控台中建立管道時,CodePipeline 將使用 S3 成品儲存貯體做為成品。(這與用於 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 ,並在 https://https://console.aws.amazon.com/codepipeline/ 開啟 CodePipeline 主控台。

    2. Welcome (歡迎) 頁面、Getting started (入門) 頁面、或者 Pipelines (管道) 頁面上,選擇 Create pipeline (建立管道)

    3. 步驟 1:選擇建立選項頁面的建立選項下,選擇建置自訂管道選項。選擇 Next (下一步)

    4. 步驟 2:選擇管道設定頁面上,在管道名稱中輸入管道的名稱。

    5. CodePipeline 提供 V1 和 V2 類型的管道,其特性和價格有所不同。V2 類型是您可以在 主控台中選擇的唯一類型。如需詳細資訊,請參閱管道類型。如需有關 CodePipeline 定價的資訊,請參閱定價

    6. Service role (服務角色) 中,讓 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. Advanced settings (進階設定) 下的設定保留為預設值,然後選擇 Next (下一步)

    8. 步驟 3:新增來源階段頁面上,在來源提供者中選擇 GitHub (透過 GitHub 應用程式)

    9. 連線下,選擇現有的連線或建立新的連線。若要為您的 GitHub 來源動作建立或管理連線,請參閱GitHub 連線

    10. ​Repository (儲存庫) 中,選擇來源儲存庫。

    11. ​Branch (分支) 中,選擇您希望使用的分支。

    12. 保留來源動作的其餘預設值。選擇 Next (下一步)

  4. 步驟 4:新增建置階段中,新增建置階段:

    1. Build provider (建置供應商) 中,選擇 AWS CodeBuild。允許 Region (區域) 預設為管道區域。

    2. 選擇建立專案

    3. Project name (專案名稱) 中,輸入此建置專案的名稱。

    4. Environment image (環境映像) 中,選擇 Managed image (受管映像)。針對 Operating system (作業系統),選擇 Ubuntu

    5. 針對 Runtime (執行時間),選擇 Standard (標準)。針對映像,選擇 aws/codebuild/standard:5.0

      CodeBuild 使用此已安裝 Android Studio 的作業系統映像來建置您的應用程式。

    6. 針對服務角色,選擇現有的 CodeBuild 服務角色或建立新的角色。

    7. 對於 Build specifications (建置規格),選擇 Use a buildspec file (使用 buildspec 檔案)

    8. 選擇 Continue to CodePipeline (繼續 CodePipeline)。這會返回 CodePipeline 主控台,並建立 CodeBuild 專案,該專案使用儲存庫buildspec.yml中的 進行組態。建置專案使用服務角色來管理 AWS 服務 許可。此步驟可能需要數分鐘。

    9. 選擇 Next (下一步)

  5. 步驟 5:新增測試階段,選擇略過測試階段,然後再次選擇略過以接受警告訊息。

    選擇 Next (下一步)

  6. 步驟 6:新增部署階段頁面上,選擇略過部署階段,然後再次選擇略過以接受警告訊息。選擇 Next (下一步)

  7. 步驟 7:檢閱中,選擇建立管道。您應該會看到圖表,顯示該來源及建置階段。

  8. 將 Device Farm 測試動作新增至您的管道:

    1. 在右上角,選擇 Edit (編輯)

    2. 在圖表的底部,選擇 + Add stage (+ 新增階段)。在 Stage name (階段名稱) 中,輸入名稱,例如 Test

    3. 選擇 + Add action group (+ 新增動作群組)

    4. ​Action name (動作名稱) 中,輸入名稱。

    5. 動作提供者中,選擇 AWS Device Farm。允許 Region (區域) 預設為管道區域。

    6. 在 ​Input artifacts (輸入成品) 中,選擇與測試階段之前的階段輸出成品相符的輸入成品,例如 BuildArtifact

      在 AWS CodePipeline 主控台中,將滑鼠游標移至管道圖表中的資訊圖示上,即可找到每個階段的輸出成品名稱。若您的管道是從 ​Source (來源) 階段直接測試您的應用程式,請選擇 ​SourceArtifact​。若管道包含 ​Build (建置) 階段,請選擇 ​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 中,輸入 Android

      以下是 AppType 的有效值清單:

      • iOS

      • Android

      • Web

    10. ​App (應用程式) 中,輸入已編譯的應用程式套件路徑。路徑為相對於測試階段輸入成品根的相對路徑。通常,此路徑與 app-release.apk 相似。

    11. 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_FUZZ

      • INSTRUMENTATION

      • XCTEST

      • XCTEST_UI

      注意

      不支援自訂環境節點。

    12. 在剩餘欄位中,提供適用於您測試及應用程式類型的組態。

    13. (選擇性) 在 Advanced (進階) 中,提供您測試執行的組態資訊。

    14. 選擇 Save (儲存)。

    15. 在您編輯的階段上,選擇 Done (完成)。在 AWS CodePipeline 窗格中,選擇 Save (儲存),然後在警告訊息中選擇 Save (儲存)

    16. 若要提交您的變更並啟動管道建置,請選擇 ​Release change (發行變更),然後選擇 ​Release (發行)