教程:創建一個管道,用於構建和測試您的 Android 應用程序 AWS Device Farm - AWS CodePipeline

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

教程:創建一個管道,用於構建和測試您的 Android 應用程序 AWS Device Farm

您可以使用 AWS CodePipeline 來配置持續集成流程,在每次推送提交時構建和測試應用程序。本教程介紹瞭如何創建和配置管道,以使用 GitHub 存儲庫中的源代碼構建和測試 Android 應用程序。管道會偵測到新 GitHub 提交的到來,然後使CodeBuild用建置應用程式和 Device Farm 來測試它。

重要

在主控台中建立管道時,S3 成品儲存貯體將用 CodePipeline於成品。(這與用於 S3 來源動作的儲存貯體不同。) 如果 S3 成品儲存貯體與管道帳戶位於不同的帳戶中,請確定 S3 成品儲存貯體所擁有的 S3 成品儲存貯體 AWS 帳戶 是安全且可靠的。

重要

您在此程序中新增至管線的許多動作都涉及建立管線之前需要建立的 AWS 資源。 AWS 來源動作的資源必須始終建立在您建立管道的相同 AWS 區域中。例如,如果您在美國東部 (俄亥俄) 區域建立管道,則您的 CodeCommit 存放庫必須位於美國東部 (俄亥俄) 區域。

您可以在建立管道時新增跨區域動作。 AWS 跨區域作業的資源必須位於您計劃執行作業的相同「 AWS 區域」中。如需詳細資訊,請參閱在中新增跨區域動作 CodePipeline

您可以使用現有的 Android 應用程序和測試定義來嘗試此操作,也可以使用 Device Farm 提供的示例應用程序和測試定義

注意

開始之前

  1. 登入 AWS Device Farm 主控台,然後選擇 [建立新專案]。

  2. 選擇您的專案。在瀏覽器中,複製新專案URL的。包URL含專案識別碼。

  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 (建立管道)。在 Step 1: Choose pipeline settings (步驟 1:選擇管道設定) 頁面的 Pipeline name (管道名稱) 中輸入管道的名稱。

    3. 在「管線類型」中,選擇 V2。如需詳細資訊,請參閱管線類型。選擇 Next (下一步)

    4. 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": "*" }
    5. Advanced settings (進階設定) 下的設定保留為預設值,然後選擇 Next (下一步)

    6. 在「步驟 2:新增來源階段」頁面的「來源提供者」中,選擇GitHub

    7. 在「連線」下,選擇現有的連線或建立新的連線。若要建立或管理來 GitHub 源動作的連線,請參閱GitHub 連接

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

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

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

  4. Add build stage (新增建置階段) 中,新增建置階段:

    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 工作室,來構建您的應用程序。

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

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

    8. 選擇「繼續」 CodePipeline。這將返回到 CodePipeline控制台並創建一個 CodeBuild 項目,該項目使用存儲庫buildspec.yml中的配置。組建專案會使用服務角色來管理 AWS 服務 權限。此步驟可能需要數分鐘。

    9. 選擇 Next (下一步)

  5. Step 4: Add deploy stage (步驟 4:新增部署階段) 頁面上,選擇 Skip deploy stage (跳過部署階段),然後再次選擇 Skip (跳過) 來接受警告訊息​。選擇 Next (下一步)

  6. Step 5: Review (步驟 5:檢閱) 上,選擇 Create pipeline (建立管道)。您應該會看到圖表,顯示該來源及建置階段。

  7. 將 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 主控台中,您可以將游標暫留在管線圖中的資訊圖示上,找到每個階段的輸出成品名稱。如果您的管道直接從「來源」階段測試您的應用程式,請選擇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_ 用戶界面

      注意

      不支援自訂環境節點。

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

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

    14. 選擇 Save (儲存)。

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

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