Share via


與 Xamarin 的持續整合簡介

持續整合是一種軟體工程實務,其中自動化組建會在專案版本控制存放庫中的開發人員新增或變更程式代碼時,編譯並選擇性地測試應用程式。 本文將討論持續整合的一般概念,以及一些可用於與 Xamarin 項目持續整合的選項。

開發人員在軟體專案上很常見,可讓開發人員平行運作。 在某些時候,必須將所有這些平行工作串流整合到構成最終產品的一個程式代碼基底。 在軟體開發初期,此整合是在專案結束時執行的,這是一個困難且有風險的程式。

持續整合 (CI) 藉由將每個開發人員的變更合併成一般程式代碼基底,以持續的方式避免這種複雜性,通常是每當任何開發人員檢查專案共用程式代碼存放庫的變更時。 每次簽入都會觸發自動化組建並執行自動化測試,以確認新引進的程式代碼並未中斷任何現有的程序代碼。 如此一來,CI 會立即呈現錯誤和問題,並確保所有小組成員都能保持彼此工作的最新狀態。 這會導致一致且穩定的程式代碼基底。

持續整合系統有兩個主要部分:

  • 版本控制 – 版本控制 (VC),也稱為原始檔控制或原始程式碼管理,將所有專案的程式代碼合併到單一共用存放庫,並保留每個檔案每個變更的完整歷程記錄。 此存放庫通常稱為 mainline 分支,包含最終將用來建置應用程式生產或發行版本的原始程式碼。 這項工作有許多 開放原始碼 和商業產品,通常允許小組或個人將程式代碼複本派生到次要分支,讓他們可以進行廣泛的變更或進行實驗,而不會對主要分支造成風險。 驗證次要分支中的變更之後,就可以全部合併回主要分支。
  • 持續整合伺服器 – 持續整合伺服器 負責收集專案的所有成品(原始程式碼、影像、影片、資料庫、自動化測試等),編譯應用程式並執行自動化測試。 同樣地,有許多 開放原始碼和商業 CI 伺服器工具。

開發人員通常會在其工作站上擁有一或多個分支的工作複本,其中一開始會完成工作。 完成一組適當的工作之後,變更會「簽入」或「認可」至適當的分支,以將它們傳播至其他開發人員的工作複本。 這就是小組確保他們都在處理相同程序代碼的方式。

同樣地,透過持續整合,認可變更的動作會導致 CI 伺服器建置專案並執行自動化測試,以確認原始程式碼的正確性。 如果有建置錯誤或測試失敗,CI 伺服器會通知負責任的開發人員(透過電子郵件、IM、Twitter、Growl 等),讓他或她可以修正問題。 (如果發生失敗,CI 伺服器甚至可以拒絕認可,這稱為「閘道簽入」。

下圖說明此程式:

This diagram illustrates this process

行動裝置應用程式為持續整合帶來獨特的挑戰。 應用程式可能需要只有實體裝置上可用的感測器,例如 GPS 或相機。 此外,模擬器或模擬器只是硬體的近似值,而且可能會隱藏或遮蔽問題。 最後,您必須在實際硬體上測試行動應用程式,以確保其確實已準備好客戶。

App Center 測試直接在數百個實體裝置上測試應用程式,以解決此特定問題。 開發人員會撰寫自動化驗收測試,以允許強大的UI測試。 將這些測試上傳至 App Center 之後,CI 伺服器就可以在 CI 程式中自動執行它們,如下圖所示:

Once these tests are uploaded to App Center, the CI server can run them automatically as part of a CI process as shown in this diagram

持續整合的元件

有一個廣泛的商業和開放原始碼工具生態系統,其設計目的是為了支援 CI。 本節說明一些最常見的部分。

版本控制

Azure DevOps 和 Team Foundation Server

Azure DevOpsTeam Foundation Server (TFS) 是 Microsoft 持續整合組建服務、工作追蹤、敏捷式規劃和報告工具,以及版本控制的共同作業工具。 透過版本控制,Azure DevOps 和 TFS 可以使用自己的系統(Team Foundation 版本控制 或 TFVC)或 GitHub 上裝載的專案。

  • Azure DevOps 會透過雲端提供服務。 其主要優點是,它不需要專用的硬體或基礎結構,而且可以透過網頁瀏覽器從任何地方存取,以及透過Visual Studio等熱門的開發工具來存取,因此它吸引地理位置分散的小組。 免費為五個開發人員或更少開發人員的小組,之後可以購買額外的授權來容納成長的小組。
  • TFS 是專為內部部署 Windows 伺服器所設計,可透過局域網路或 VPN 連線來存取該網路。 其主要優點是,您可以完全控制組建伺服器的組態,並可以安裝任何所需的額外軟體或服務。 TFS 有適用於小型小組的免費入門級 Express 版本。

TFS 和 Azure DevOps 都與 Visual Studio 緊密整合,可讓開發人員從單一 IDE 的舒適內執行許多版本控制和 CI 工作。 您也可以使用 Eclipse 的 Team Explorer Everywhere 外掛程式(請參閱下方)。 Visual Studio for Mac 有 可用的 TFVC 預覽。

Azure DevOps Pipelines 直接支援 Xamarin 專案,您可以在其中為您想要設定目標的每個平臺建立組建定義(Android、iOS 和 Windows)。 每個組建定義都需要適當的 Xamarin 授權。 您也可以將此用途的本機 Xamarin 功能 TFS 組建伺服器連線至 Azure DevOps。 透過此設定,排入 Azure DevOps 的組建將會委派給本地伺服器。 如需詳細資訊,請參閱 組建和發行代理程式。 或者,您可以使用另一個建置工具,例如 Jenkins 或 Team City。

Visual Studio、Azure DevOps 和 Team Foundation Server 的所有應用程式生命週期管理 (ALM) 功能的完整摘要,請參閱 DevOps with Xamarin Apps

Team Explorer Everywhere

Team Explorer Everywhere 將 Team Foundation Server 和 Azure DevOps 的強大功能帶給在 Visual Studio 外部開發的小組。 它可讓開發人員從 Eclipse 或 OS X 和 Linux 的跨平臺命令行用戶端,連線到內部部署或雲端中的小組專案。 Team Explorer Everywhere 提供版本控制的完整存取權(包括 Git)、工作專案,以及非 Windows 平臺的建置功能。

Git

Git 是一種熱門 開放原始碼 版本控制解決方案,原本是為了管理 Linux 核心的原始程式碼而開發。 這是一個非常快速、彈性的系統,深受各種規模的軟體項目所歡迎。 它可以輕鬆地從單一開發人員調整,且因特網存取能力不佳,可存取全球的大型小組。 Git 也可讓分支變得非常簡單,進而鼓勵平行串流開發,風險最低。

Git 可以透過網頁瀏覽器或 在 Linux、Mac OSX 和 Windows 上執行的 GUI 用戶端 完全運作。 公用存放庫是免費的;私人存放庫需要付費 方案

目前版本的Visual Studio for Windows 和Mac提供 Git的原生支援。 Microsoft 為 舊版 Visual Studio 提供 Git 的可下載延伸模組。 如上所述,Azure DevOps 和 TFS 可以使用 Git 進行版本控制,而不是使用 TFVC。

Subversion

Subversion (SVN) 是自 2000 年以來一直使用中的熱門 開放原始碼 版本控制系統。 SVN 會在所有新式版本的 OS X、Windows、FreeBSD、Linux 和 Unix 上執行。 Visual Studio for Mac 有 SVN 的原生支援。 有第三方擴充功能可將 SVN 支援帶到 Visual Studio。

持續整合環境

設定持續整合環境表示將版本控制系統與組建服務結合。 針對後者,最常見的兩個是:

  • Azure Pipelines 是 Azure DevOps 和 TFS 的建置系統。 它與 Visual Studio 緊密整合,方便開發人員觸發組建、自動執行測試,並查看結果。
  • Jenkins 是一部開放原始碼 CI 伺服器,具有豐富的外掛程式生態系統,可支援各種軟體開發。 它會在 Windows 和 Mac OS X 上執行。Jenkins 未與任何特定 IDE 整合。 相反地,它會透過 Web 介面進行設定和管理。 Jenkins CI 也很容易安裝和設定,這使得它吸引小型團隊。

您可以單獨使用 TFS/Azure DevOps,也可以搭配 TFS/Azure DevOps 或 Git 使用 Jenkins,如下列各節所述。

Azure DevOps 和 Team Foundation Server

如前所述,Azure DevOps 和 Team Foundation Server 同時提供版本控制和建置服務。 建置服務一律需要每個目標平臺的 Xamarin Business 或 Enterprise 授權。

使用 Azure DevOps,您可以為每個目標平臺建立個別的組建定義,並在該處輸入適當的授權。 設定之後,Azure DevOps 將會在雲端中執行組建和測試。 如需詳細資訊,請參閱 Azure Pipelines

使用 Team Foundation Server,您可以針對特定目標平台設定組建計算機,如下所示:

  • Android 和 Windows: 安裝 Visual Studio 和 Xamarin 工具(適用於 Android 和 Windows),並使用您的 Xamarin 授權進行設定。 此外,也需要將 Android SDK 移至 TFS 組建代理程式可以找到該位置的伺服器上共用位置。 如需詳細資訊,請參閱 設定 TFVC
  • iOS 和 Xamarin: 使用適當的授權在 Windows 伺服器上安裝 Visual Studio 和 Xamarin 工具。 然後在可網路存取的 Mac OS X 計算機上安裝 Visual Studio for Mac,以作為組建主機,並建立最終的應用程式套件 (iOS 版 IPA,適用於 OS X 的應用程式)。

下圖說明此地形:

This diagram illustrates this topography

您也可以將本機 TFS 伺服器連結至 Azure DevOps 專案,以便將 Azure DevOps 組建委派給本地伺服器。 如需詳細資訊,請參閱 建置和發行代理程式

Azure DevOps 和 Jenkins

如果您使用 Jenkins 來建置應用程式,您可以將程式代碼儲存在 Azure DevOps 或 Team Foundation Server 中,並繼續將 Jenkins 用於 CI 組建。 當您將程式代碼推送至小組專案的 Git 存放庫,或將程式代碼簽入 TFVC 時,您可以觸發 Jenkins 組建。 如需詳細資訊,請參閱 使用 Azure DevOps 的 Jenkins。

If you use Jenkins to build your apps, you can store your code in Azure DevOps or Team Foundation Server and continue to use Jenkins for your CI builds

Git 和 Jenkins

另一個常見的 CI 環境可以完全以 OS X 為基礎。 此案例牽涉到使用 Git 進行原始程式碼控制和建置伺服器的 Jenkins。 這兩者都在已安裝 Visual Studio for Mac 的單一 Mac OS X 電腦上執行。 這與上一節所討論的 Azure DevOps + Jenkins 環境非常類似:

This is very similar to the Azure DevOps + Jenkins environment discussed in the previous section

重要

Microsoft 不支援 Jenkins