Korzystanie z serwera TeamCity w środowisku Xamarin

W tym przewodniku omówiono kroki związane z używaniem usługi TeamCity do kompilowania aplikacji mobilnych, a następnie przesyłania ich do usługi App Center Test.

Jak opisano w przewodniku Wprowadzenie do ciągłej integracji , ciągła integracja (CI) jest przydatną praktyką podczas tworzenia wysokiej jakości aplikacji mobilnych. Istnieje wiele realnych opcji oprogramowania serwera ciągłej integracji; Ten przewodnik koncentruje się na usłudze TeamCity firmy JetBrains.

Istnieje kilka różnych permutacji instalacji usługi TeamCity. Na poniższej liście opisano niektóre z tych permutacji:

  • Usługa systemu Windows — w tym scenariuszu usługa TeamCity jest uruchamiana po uruchomieniu systemu Windows jako usługa systemu Windows. Musi być sparowany z hostem kompilacji dla komputerów Mac, aby skompilować wszystkie aplikacje systemu iOS.

  • Uruchom demona w systemie OS X — koncepcyjnie jest to podobne do działania jako usługa systemu Windows opisana w poprzednim kroku. Domyślnie kompilacje będą uruchamiane na koncie głównym.

  • Konto użytkownika w systemie OS X — można uruchomić usługę TeamCity na koncie użytkownika, które jest uruchamiane za każdym razem, gdy użytkownik loguje się.

W poprzednich scenariuszach uruchamianie usługi TeamCity na koncie użytkownika w systemie OS X jest najprostsze i najłatwiejsze do skonfigurowania.

Istnieje kilka kroków związanych z konfigurowaniem usługi TeamCity:

  • Instalowanie usługi TeamCity — instalacja usługi TeamCity nie jest omówiona w tym przewodniku. W tym przewodniku założono, że usługa TeamCity jest zainstalowana i uruchomiona na koncie użytkownika. Instrukcje dotyczące instalowania usługi TeamCity można znaleźć w dokumentacji usługi TeamCity 8 firmy JetBrains.

  • Przygotowanie serwera kompilacji — ten krok obejmuje zainstalowanie niezbędnego oprogramowania, narzędzi i certyfikatów wymaganych do tworzenia aplikacji mobilnych i przygotowania ich do dystrybucji.

  • Tworzenie skryptu kompilacji — ten krok nie jest ściśle konieczny, ale skrypt kompilacji jest przydatną pomocą w tworzeniu aplikacji nienadzorowanych. Użycie skryptu kompilacji pomoże w rozwiązywaniu problemów z kompilacją, które mogą wystąpić i zapewnia spójny, powtarzalny sposób tworzenia plików binarnych do dystrybucji, nawet jeśli ciągła integracja nie jest praktykowana.

  • Tworzenie projektu TeamCity — po zakończeniu poprzednich trzech kroków musimy utworzyć projekt TeamCity zawierający wszystkie metadane niezbędne do pobrania kodu źródłowego, skompilowania projektów i przesłania testów do usługi App Center Test.

Wymagania

Wymagane jest doświadczenie w testowaniu usługi App Center .

Wymagana jest znajomość usługi TeamCity 8.1. Instalacja usługi TeamCity wykracza poza zakres tego dokumentu. Przyjęto założenie, że usługa TeamCity jest zainstalowana w systemie OS X Mavericks i działa w ramach zwykłego konta użytkownika, a nie konta głównego.

Serwer kompilacji powinien być komputerem autonomicznym z systemem OS X przeznaczonym do ciągłej integracji. W idealnym przypadku serwer kompilacji nie będzie odpowiedzialny za żadne inne role, takie jak serwer bazy danych, serwer internetowy lub stacja robocza dewelopera.

Ważne

Ten przewodnik nie obejmuje "headless" instalacji platformy Xamarin.

Konfiguracja zapory

Aby testy zostały przesłane do chmury testowej platformy Xamarin, komputer przesyłając testy musi mieć możliwość komunikowania się z serwerami w chmurze testowej. Zapory muszą być skonfigurowane tak, aby zezwalały na ruch sieciowy do i z serwerów znajdujących się w testcloud.xamarin.com na portach 80 i 443. Ten punkt końcowy jest zarządzany przez system DNS, a adres IP może ulec zmianie.

W niektórych sytuacjach test (lub urządzenie z uruchomionym testem) musi komunikować się z serwerami internetowymi chronionymi przez zaporę. W tym scenariuszu zapora musi być skonfigurowana tak, aby zezwalała na ruch z następujących adresów IP:

  • 195.249.159.238
  • 195.249.159.239

Przygotowywanie serwera kompilacji

Kluczowym krokiem w konfigurowaniu serwera kompilacji jest zainstalowanie wszystkich niezbędnych narzędzi, oprogramowania i certyfikatów do tworzenia aplikacji mobilnych. Ważne jest, aby serwer kompilacji mógł skompilować rozwiązanie mobilne i uruchomić wszystkie testy. Aby zminimalizować problemy z konfiguracją, oprogramowanie i narzędzia powinny być zainstalowane na tym samym koncie użytkownika, które hostuje usługę TeamCity. Poniższa lista zawiera szczegółowe informacje o tym, co jest wymagane:

  1. Visual Studio dla komputerów Mac — obejmuje to platformy Xamarin.iOS i Xamarin.Android.
  2. Zaloguj się do magazynu składników Xamarin — ten krok jest opcjonalny i wymagany tylko wtedy, gdy aplikacja korzysta ze składników z magazynu składników Xamarin. Aktywne logowanie się do magazynu składników w tym momencie uniemożliwi wszelkie problemy, gdy kompilacja usługi TeamCity próbuje skompilować aplikację.
  3. Xcode — program Xcode jest wymagany do kompilowania i podpisywania aplikacji systemu iOS.
  4. Narzędzia wiersza polecenia programu Xcode — opisano to w kroku 1 sekcji Instalacja przewodnika Aktualizowanie języka Ruby za pomocą środowiska rbenv .
  5. Profile podpisywania tożsamości i aprowizacji — zaimportuj certyfikaty i profil aprowizacji za pośrednictwem programu XCode. Aby uzyskać więcej informacji, zobacz Przewodnik firmy Apple dotyczący eksportowania tożsamości podpisywania i profilów aprowizacji.
  6. Magazyny kluczy systemu Android — skopiuj wymagane magazyny kluczy systemu Android do katalogu, do którego użytkownik usługi TeamCity ma dostęp, tj. ~/Documents/keystores/MyAndroidApp1.
  7. Calabash — jest to opcjonalny krok, jeśli aplikacja ma testy napisane przy użyciu narzędzia Calabash. Aby uzyskać więcej informacji, zobacz przewodnik Installing Calabash on OS X Mavericks (Instalowanie powłoki Calabash w systemie OS X Mavericks) i Przewodnik Dotyczący aktualizowania języka Ruby za pomocą oprogramowania rbenv.

Na poniższym diagramie przedstawiono wszystkie te składniki:

This diagram illustrates all of these components

Po zainstalowaniu całego oprogramowania zaloguj się do konta użytkownika i upewnij się, że wszystkie oprogramowanie jest prawidłowo zainstalowane i działa. Powinno to obejmować kompilowanie rozwiązania i przesyłanie aplikacji do usługi App Center Test. Można to uprościć, uruchamiając skrypt kompilacji zgodnie z opisem w następnej sekcji.

Tworzenie skryptu kompilacji

Mimo że usługa TeamCity może obsługiwać wszystkie aspekty kompilowania i przesyłania aplikacji mobilnych do samego testu w usłudze App Center; Zaleca się utworzenie skryptu kompilacji. Skrypt kompilacji zapewnia następujące korzyści:

  1. Dokumentacja — skrypt kompilacji służy jako forma dokumentacji dotyczącej sposobu tworzenia oprogramowania. Spowoduje to usunięcie niektórych "magii", które jest skojarzone z wdrażaniem aplikacji i umożliwia deweloperom skoncentrowanie się na funkcjach.
  2. Powtarzalność — skrypt kompilacji gwarantuje, że za każdym razem, gdy aplikacja jest kompilowana i wdrażana, odbywa się w taki sam sposób, niezależnie od tego, kto lub co wykonuje pracę. Ta powtarzalna spójność usuwa wszelkie problemy lub błędy, które mogą występować z powodu niepoprawnie wykonanej kompilacji lub błędu ludzkiego.
  3. Przechowywanie wersji — skrypt kompilacji można uwzględnić w systemie kontroli źródła. Oznacza to, że zmiany skryptu kompilacji można śledzić, monitorować i poprawiać w przypadku znalezienia błędów lub niedokładności.
  4. Przygotowanie środowiska — skrypt kompilacji może obejmować logikę instalowania wszystkich wymaganych zależności innych firm. Dzięki temu aplikacje będą kompilowane przy użyciu odpowiednich składników.

Skrypt kompilacji może być tak prosty, jak plik programu PowerShell (w systemie Windows) lub skrypt powłoki bash (w systemie OS X). Podczas tworzenia skryptu kompilacji istnieje kilka opcji dla języków skryptów:

  • Rake — jest to język specyficzny dla domeny (DSL) do tworzenia projektów opartych na języku Ruby. Rake ma przewagę popularności i bogaty ekosystem bibliotek.

  • psake — jest to biblioteka programu Windows PowerShell do tworzenia oprogramowania

  • FAKE — jest to język DSL oparty na języku F#, który umożliwia korzystanie z istniejących bibliotek platformy .NET w razie potrzeby.

Używany język skryptów zależy od preferencji i wymagań.

Uwaga

Można użyć systemu kompilacji opartego na języku XML, takiego jak MSBuild lub NAnt, ale nie mają one ekspresywności i możliwości utrzymania rozszerzenia DSL przeznaczonego do tworzenia oprogramowania.

Parametryzacja skryptu kompilacji

Proces tworzenia i testowania oprogramowania wymaga informacji, które powinny być tajne. Utworzenie pakietu APK może wymagać hasła do magazynu kluczy i/lub aliasu klucza w magazynie kluczy. Podobnie test usługi App Center wymaga klucza interfejsu API unikatowego dla dewelopera. Te typy wartości nie powinny być zakodowane w skrycie kompilacji. Zamiast tego należy przekazać je jako zmienne do skryptu kompilacji.

Mniej poufne to wartości, takie jak identyfikator urządzenia z systemem iOS lub identyfikator urządzenia z systemem Android identyfikujące urządzenia, które powinny być używane przez centrum aplikacji na potrzeby przebiegów testów. Nie są to wartości, które muszą być chronione, ale mogą ulec zmianie z kompilacji na kompilację.

Przechowywanie tych typów zmiennych poza skryptem kompilacji ułatwia również udostępnianie skryptu kompilacji w organizacji, na przykład deweloperom. Deweloperzy mogą używać dokładnie tego samego skryptu co serwer kompilacji, ale mogą używać własnych magazynów kluczy i kluczy interfejsu API.

Istnieją dwie możliwe opcje przechowywania tych poufnych wartości:

  • Plik konfiguracji — aby chronić klucz interfejsu API, ta wartość nie powinna być zaewidencjonowana w kontroli wersji. Plik można utworzyć dla każdej maszyny. Sposób odczytywania wartości z tego pliku zależy od używanego języka skryptowego.

  • Zmienne środowiskowe — można je łatwo ustawiać dla poszczególnych maszyn i są niezależne od bazowego języka skryptowego.

Każda z tych opcji ma zalety i wady. Program TeamCity dobrze współpracuje ze zmiennymi środowiskowymi, dlatego ten przewodnik zaleci tę technikę podczas tworzenia skryptów kompilacji.

Kroki kompilacji

Skrypt kompilacji musi wykonać następujące czynności:

  • Skompiluj aplikację — obejmuje to podpisywanie aplikacji przy użyciu poprawnego profilu aprowizacji.

  • Prześlij aplikację do chmury testowej platformy Xamarin — obejmuje to podpisywanie i zip wyrównywanie pakietu APK z odpowiednim magazynem kluczy.

Te dwa kroki zostaną wyjaśnione bardziej szczegółowo poniżej.

Kompilowanie aplikacji platformy Xamarin.iOS

Poniższy wiersz polecenia określający kompilację wydania rozwiązania SOLUTION_FILE.sln dla i Telefon. Lokalizację usługi IPA można ustawić, określając IpaPackageDir właściwość w wierszu polecenia:

  • Na komputerze Mac przy użyciu programu xbuild:

    xbuild /p:Configuration="Release" \ 
           /p:Platform="iPhone" \ 
           /p:IpaPackageDir="$HOME/Builds" \
           /t:Build MyProject.sln
    

Polecenie xbuild znajduje się zwykle w katalogu /Library/Frameworks/Mono.framework/Commands.

  • W systemie Windows przy użyciu programu msbuild:

    msbuild /p:Configuration="Release" 
            /p:Platform="iPhone" 
            /p:IpaPackageDir="%USERPROFILE%\Builds" 
            /p:ServerAddress="192.168.1.3" /p:ServerUser="macuser"  
            /t:Build MyProject.sln
    

Program msbuild nie będzie automatycznie rozszerzać $( ) wyrażeń przekazywanych przez wiersz polecenia. Z tego powodu zaleca się użycie pełnej ścieżki podczas ustawiania IpaPackageDir elementu w wierszu polecenia.

Aby uzyskać więcej informacji na temat IpaPackageDir właściwości, zobacz Informacje o wersji dla systemu iOS 9.8.

Kompilowanie aplikacji platformy Xamarin.Android

Aby skompilować aplikację systemu Android, użyj programu xbuild (lub msbuild w systemie Windows):

/Library/Frameworks/Mono.framework/Commands/xbuild /t:SignAndroidPackage /p:Configuration=Release /path/to/android.csproj

Kompilowanie aplikacji systemu Android xbuild używa projektu, podczas gdy aplikacja systemu iOS xbuild używa rozwiązania.

Przesyłanie testów Xamarin.UITests do Centrum aplikacji

Testy interfejsu użytkownika są przesyłane przy użyciu interfejsu wiersza polecenia usługi App Center, jak pokazano w poniższym fragmencie kodu:

appcenter test run uitest --app <TEAM-NAME/APP-NAME> --devices <DEVICE_SET> --token <API_KEY> --app-path <appname.APK-or-appname.IPA> --merge-nunit-xml report.xml --build-dir pathToUITestBuildDir

Po uruchomieniu testu wyniki testu zostaną zwrócone w postaci pliku XML stylu NUnit o nazwie report.xml. Usługa TeamCity wyświetli informacje w dzienniku kompilacji.

Aby uzyskać więcej informacji na temat przesyłania testów interfejsu użytkownika do centrum aplikacji, zobacz Przygotowywanie aplikacji platformy Xamarin.Android lub Przygotowywanie aplikacji platformy Xamarin.iOS.

Przesyłanie testów calabash do centrum aplikacji

Testy calabash są przesyłane przy użyciu interfejsu wiersza polecenia usługi App Center, jak pokazano w poniższym fragmencie kodu:

appcenter test run calabash --app <TEAM-NAME/APP-NAME> --devices <DEVICE_SET> --token <API_KEY> --app-path <appname.APK-or-appname.IPA> --project-dir pathToProjectDir

Aby przesłać aplikację systemu Android do usługi App Center Test, należy najpierw ponownie skompilować serwer testowy APK przy użyciu calabash-android:

$ calabash-android build </path/to/signed/APK>
$ appcenter test run calabash --app <TEAM-NAME/APP-NAME> --devices <DEVICE_SET> --token <API_KEY> --app-path <appname.APK> --project-dir pathToProjectDir

Aby uzyskać więcej informacji na temat przesyłania testów Calabash, zapoznaj się z przewodnikiem platformy Xamarin dotyczącym przesyłania testów Calabash do chmury testowej.

Tworzenie projektu TeamCity

Po zainstalowaniu usługi TeamCity i Visual Studio dla komputerów Mac można skompilować projekt, nadszedł czas, aby utworzyć projekt w usłudze TeamCity w celu skompilowania projektu i przesłania go do Centrum aplikacji.

  1. Rozpoczęto od zalogowania się do usługi TeamCity za pośrednictwem przeglądarki internetowej. Przejdź do głównego projektu:

    Navigate to the Root Project Pod głównym projektem utwórz nowy podprojekt:

    Navigate to the Root Project Underneath the Root Project, create a new subproject

  2. Po utworzeniu podprojektu dodaj nową konfigurację kompilacji:

    Once the subproject is created, add a new Build Configuration

  3. Dołącz projekt VCS do konfiguracji kompilacji. Odbywa się to za pośrednictwem ekranu Ustawienia kontroli wersji:

    This is done via the Version Control Setting screen

    Jeśli nie ma utworzonego projektu VCS, możesz go utworzyć na stronie Nowy katalog główny VCS pokazany poniżej:

    If there's no VCS project created, you can create one from the New VCS Root page

    Po dołączeniu katalogu głównego VCS usługa TeamCity wyewidencjonuje projekt i spróbuje automatycznie wykryć kroki kompilacji. Jeśli znasz usługę TeamCity, możesz wybrać jedną z wykrytych kroków kompilacji. Na razie można bezpiecznie zignorować wykryte kroki kompilacji.

  4. Następnie skonfiguruj wyzwalacz kompilacji. Spowoduje to utworzenie kompilacji w kolejce po spełnieniu określonych warunków, takich jak zatwierdzenie przez użytkownika kodu do repozytorium. Poniższy zrzut ekranu przedstawia sposób dodawania wyzwalacza kompilacji:

    This screenshot shows how to add a build trigger Przykład konfigurowania wyzwalacza kompilacji można zobaczyć na poniższym zrzucie ekranu:

    An example of configuring a build trigger can be seen in this screenshot

  5. W poprzedniej sekcji Parametryzacja skryptu kompilacji zasugerowano przechowywanie niektórych wartości jako zmiennych środowiskowych. Te zmienne można dodać do konfiguracji kompilacji za pomocą ekranu Parametry. Dodaj zmienne dla klucza interfejsu API centrum aplikacji, identyfikatora urządzenia z systemem iOS i identyfikatora urządzenia z systemem Android, jak pokazano na poniższym zrzucie ekranu:

    Add the variables for the App Center Test API Key, the iOS device ID, and the Android Device ID

  6. Ostatnim krokiem jest dodanie kroku kompilacji, który wywoła skrypt kompilacji w celu skompilowania aplikacji i w kolejce aplikacji do usługi App Center Test. Poniższy zrzut ekranu jest przykładem kroku kompilacji, który używa pliku Rakefile do kompilowania aplikacji:

    This screenshot is an example of a build step that uses a Rakefile to build an application

  7. W tym momencie konfiguracja kompilacji zostanie ukończona. Dobrym pomysłem jest wyzwolenie kompilacji w celu potwierdzenia prawidłowego skonfigurowania projektu. Dobrym sposobem na to jest zatwierdzenie małej, nieistotnej zmiany w repozytorium. Usługa TeamCity powinna wykryć zatwierdzenie i uruchomić kompilację.

  8. Po zakończeniu kompilacji sprawdź dziennik kompilacji i sprawdź, czy występują jakieś problemy lub ostrzeżenia z kompilacją, która wymaga uwagi.

Podsumowanie

W tym przewodniku opisano sposób tworzenia aplikacji Xamarin Mobile przy użyciu usługi TeamCity, a następnie przesyłania ich do usługi App Center Test. Omówiliśmy tworzenie skryptu kompilacji w celu zautomatyzowania procesu kompilacji. Skrypt kompilacji zajmuje się kompilowaniem aplikacji, przesyłaniem do usługi App Center Test i oczekiwaniem na wyniki.

Następnie omówiliśmy sposób tworzenia projektu w usłudze TeamCity, który będzie kolejkować kompilację za każdym razem, gdy deweloper zatwierdzi kod i wywoła skrypt kompilacji.