Úvod do kontinuální integrace s Xamarinem
Kontinuální integrace je postup softwarového inženýrství, ve kterém automatizované sestavení kompiluje a volitelně testuje aplikaci při přidání nebo změně kódu vývojáři v úložišti správy verzí projektu. Tento článek popisuje obecné koncepty kontinuální integrace a některé z možností dostupných pro kontinuální integraci s projekty Xamarin.
U softwarových projektů je běžné, že vývojáři pracují paralelně. V určitém okamžiku je nutné integrovat všechny tyto paralelní proudy práce do jednoho základu kódu, který tvoří konečný produkt. V prvních dnech vývoje softwaru byla tato integrace provedena na konci projektu, což byl složitý a rizikový proces.
Kontinuální integrace (CI) se takovým složitostem vyhněte sloučením změn všech vývojářů do společného základu kódu průběžně, obvykle vždy, když všichni vývojáři kontrolují změny ve sdíleném úložišti kódu projektu. Každé vrácení se změnami aktivuje automatizované sestavení a spustí automatizované testy, které ověří, že nově zavedený kód neporušil žádný existující kód. Ci tak okamžitě zobrazí chyby a problémy a zajistí, aby všichni členové týmu zůstali v aktualizovaném stavu s prací ostatních. Výsledkem je soudržný a stabilní základ kódu.
Systémy kontinuální integrace mají dvě hlavní části:
- Správa verzí – Správa verzí (VC), označovaná také jako správa zdrojového kódu nebo správy zdrojového kódu, slučuje veškerý kód projektu do jednoho sdíleného úložiště a uchovává úplnou historii všech změn v každém souboru. Toto úložiště, často označované jako hlavní větev, obsahuje zdrojový kód, který se nakonec použije k sestavení produkční nebo vydané verze aplikace. Pro tento úkol existuje mnoho opensourcových a komerčních produktů, které obvykle umožňují týmům nebo jednotlivcům vytvořit kopii kódu do sekundárních větví, kde můžou provádět rozsáhlé změny nebo provádět experimenty bez rizika pro hlavní větev. Jakmile se změny v sekundární větvi ověří, můžou být všechny sloučeny zpět do hlavní větve.
- Continuous Integration Server – Server kontinuální integrace zodpovídá za shromažďování všech artefaktů projektu (zdrojový kód, obrázky, videa, databáze, automatizované testy atd.), kompilace aplikace a spouštění automatizovaných testů. Opět existuje mnoho opensourcových a komerčních nástrojů serveru CI.
Vývojáři obvykle mají pracovní kopii jedné nebo více větví na svých pracovních stanicích, kde se práce zpočátku provádí. Po dokončení příslušné sady práce jsou změny "vráceny se změnami" nebo "potvrzeny" do příslušné větve, která je rozšíří do pracovních kopií jiných vývojářů. Tímto způsobem tým zajistí, že všichni pracují na stejném kódu.
Díky kontinuální integraci způsobí server CI sestavení projektu a spuštění automatizovaných testů, aby ověřil správnost zdrojového kódu. Pokud dojde k chybám sestavení nebo selháním testu, server CI upozorní zodpovědného vývojáře (prostřednictvím e-mailu, rychlých zpráv, Twitteru, Growlu atd.), aby mohl problém opravit. (Servery CI mohou potvrzení dokonce odmítnout, pokud dojde k selháním, což se nazývá "gated check-in".)
Tento proces znázorňuje následující diagram:
Mobilní aplikace představují jedinečné výzvy pro kontinuální integraci. Aplikace můžou vyžadovat senzory, jako je GPS nebo kamera, které jsou dostupné jenom na fyzických zařízeních. Simulátory nebo emulátory jsou navíc pouze přibližnou aproximací hardwaru a mohou skrýt nebo zakrýt problémy. Nakonec je potřeba otestovat mobilní aplikaci na skutečném hardwaru, abyste měli jistotu, že je skutečně připravená pro zákazníky.
Test App Center řeší tento konkrétní problém testováním aplikací přímo na stovkách fyzických zařízení. Vývojáři píší automatizované akceptační testy, které umožňují výkonné testování uživatelského rozhraní. Jakmile se tyto testy nahrají do App Center, může je server CI spustit automaticky jako součást procesu CI, jak je znázorněno v následujícím diagramu:
Existuje rozsáhlý ekosystém komerčních a opensourcových nástrojů navržených pro podporu CI. Tato část vysvětluje několik nejběžnějších.
Azure DevOps a Team Foundation Server (TFS) jsou nástroje microsoftu pro spolupráci pro služby průběžného sestavování integrace, sledování úloh, agilní nástroje pro plánování a vytváření sestav a správu verzí. Díky správě verzí může Azure DevOps a TFS pracovat s vlastním systémem (Správa verzí Team Foundation nebo TFVC) nebo s projekty hostovanými na GitHubu.
- Azure DevOps poskytuje služby prostřednictvím cloudu. Jeho hlavní výhodou je, že nevyžaduje žádný vyhrazený hardware nebo infrastrukturu a je možné k němu přistupovat odkudkoli prostřednictvím webových prohlížečů a prostřednictvím oblíbených vývojových nástrojů, jako je Visual Studio, což je atraktivní pro týmy, které jsou geograficky distribuované. Je zdarma pro týmy pěti vývojářů nebo méně, po kterých je možné zakoupit další licence, aby se přizpůsobil rostoucímu týmu.
- SADA TFS je určená pro místní servery s Windows a přístupná prostřednictvím místní sítě nebo připojení VPN k této síti. Hlavní výhodou je, že plně řídíte konfiguraci buildových serverů a můžete nainstalovat jakýkoli další software nebo služby, které jsou potřeba. TFS má bezplatnou vstupní edici Express pro malé týmy.
TFS i Azure DevOps jsou úzce integrované se sadou Visual Studio a umožňují vývojářům provádět mnoho úloh správy verzí a CI z pohodlí jednoho integrovaného vývojového prostředí (IDE). K dispozici je také modul plug-in Team Explorer Everywhere pro Eclipse (viz níže). Visual Studio pro Mac má k dispozici verzi Preview TFVC.
Azure DevOps Pipelines má přímou podporu pro projekty Xamarin, ve kterých vytvoříte definici sestavení pro každou platformu, na kterou chcete cílit (Android, iOS a Windows). Pro každou definici sestavení je potřeba příslušná licence Xamarinu. Pro tento účel je také možné připojit místní server sestavení TFS podporující Xamarin k Azure DevOps. Při tomto nastavení se sestavení, která jsou zařazená do fronty do Azure DevOps, delegují na místní server. Podrobnosti najdete v agentech sestavení a verzí. Alternativně můžete použít jiný nástroj pro sestavení, jako je Jenkins nebo Team City.
Úplný souhrn všech funkcí správy životního cyklu aplikací (ALM) sady Visual Studio, Azure DevOps a Team Foundation Server najdete v tématu DevOps s Xamarin Apps.
Team Explorer Everywhere přináší sílu Team Foundation Serveru a Azure DevOps týmům, které se vyvíjejí mimo Visual Studio. Umožňuje vývojářům připojit se k týmovým projektům místně nebo v cloudu z Eclipse nebo klienta příkazového řádku pro různé platformy pro OS X a Linux. Team Explorer Everywhere poskytuje úplný přístup ke správě verzí (včetně Gitu), pracovních položek a možností sestavení pro platformy mimo Windows.
Git je oblíbené opensourcové řešení správy verzí, které bylo původně vyvinuto pro správu zdrojového kódu jádra Linuxu. Jedná se o velmi rychlý a flexibilní systém, který je oblíbený u softwarových projektů všech velikostí. Snadno se škáluje od jednotlivých vývojářů s nízkým přístupem k internetu k velkým týmům, které pokrývají svět. Git také usnadňuje větvení, což zase může podpořit paralelní datové proudy vývoje s minimálním rizikem.
Git může pracovat zcela prostřednictvím webových prohlížečů nebo klientů grafického uživatelského rozhraní, které běží v Linuxu, Mac OSX a Windows. Je zdarma pro veřejná úložiště; privátní úložiště vyžadují placený plán.
Aktuální verze sady Visual Studio pro Windows a Mac poskytují nativní podporu pro Git. Microsoft poskytuje rozšíření ke stažení pro Git pro starší verze sady Visual Studio. Jak je uvedeno výše, Azure DevOps a TFS můžou používat Git pro správu verzí místo TFVC.
Subversion (SVN) je oblíbený opensourcový systém správy verzí, který se používá od roku 2000. SVN běží ve všech moderních verzích OS X, Windows, FreeBSD, Linuxu a Unixu. Visual Studio pro Mac má nativní podporu pro SVN. Existují rozšíření třetích stran, která do sady Visual Studio přinášejí podporu SVN.
Nastavení prostředí kontinuální integrace znamená kombinování systému správy verzí se službou sestavení. Pro druhou z nich jsou tyto dvě nejběžnější:
- Azure Pipelines je systém sestavení Azure DevOps a TFS. Je úzce integrovaný se sadou Visual Studio, což vývojářům umožňuje aktivovat sestavení, automaticky spouštět testy a zobrazovat výsledky.
- Jenkins je opensourcový server CI s bohatým ekosystémem modulů plug-in, který podporuje všechny druhy vývoje softwaru. Běží v systémech Windows a Mac OS X. Jenkins není integrovaný s žádným konkrétním integrovaným vývojovém prostředím. Místo toho se konfiguruje a spravuje prostřednictvím webového rozhraní. Jenkins CI je také snadno instalovat a konfigurovat, což z něj dělá atraktivní pro malé týmy.
TFS/Azure DevOps můžete použít samostatně nebo můžete jenkinse použít v kombinaci s TFS/Azure DevOps nebo Gitem, jak je popsáno v následujících částech.
Jak je popsáno, Azure DevOps a Team Foundation Server poskytují jak správu verzí, tak služby sestavení. Služby sestavení vždy vyžadují licenci Xamarin Business nebo Enterprise pro každou cílovou platformu.
S Azure DevOps vytvoříte pro každou cílovou platformu samostatnou definici sestavení a zadáte tam příslušnou licenci. Po nakonfigurování azure DevOps spustí sestavení a testy v cloudu. Další podrobnosti najdete v Azure Pipelines .
Pomocí Team Foundation Serveru nakonfigurujete počítač sestavení následujícím způsobem pro konkrétní cílové platformy:
- Android a Windows: Nainstalujte sadu Visual Studio a nástroje Xamarin (pro Android i Windows) a nakonfigurujte s licencemi Xamarinu. Je také nutné přesunout sadu Android SDK do sdíleného umístění na serveru, kde ho může najít agent sestavení TFS. Podrobnosti najdete v tématu Konfigurace TFVC.
- iOS a Xamarin: Nainstalujte sadu Visual Studio a nástroje Xamarin na Windows Server s příslušnou licencí. Potom nainstalujte Visual Studio pro Mac na počítač s Mac OS X, který bude sloužit jako hostitel sestavení a vytvoří konečný balíček aplikace (IPA pro iOS, APP for OS X).
Následující diagram znázorňuje tuto topografii:
Místní server TFS je také možné propojit s projektem Azure DevOps, aby se sestavení Azure DevOps delegují na místní server. Podrobnosti najdete v tématu Agenti sestavení a vydání.
Pokud k vytváření aplikací používáte Jenkinse, můžete kód uložit do Azure DevOps nebo Team Foundation Serveru a dál používat Jenkinse pro vaše buildy CI. Sestavení Jenkinse můžete aktivovat při nasdílení kódu do úložiště Git vašeho týmového projektu nebo při vrácení kódu se změnami do TFVC. Podrobnosti najdete v Jenkinse s Azure DevOps.
Dalším běžným prostředím CI může být zcela založené na OS X. Tento scénář zahrnuje použití Gitu pro správu zdrojového kódu a Jenkinse pro buildovací server. Obě tyto počítače běží na jednom počítači Mac OS X s nainstalovaným Visual Studio pro Mac. Je to velmi podobné prostředí Azure DevOps + Jenkins, které je popsáno v předchozí části:
Důležité
Microsoft nepodporuje Jenkinse.