Udostępnij za pośrednictwem


Korzystanie z systemu Jenkins w środowisku Xamarin

W tym przewodniku przedstawiono sposób konfigurowania serwera Jenkins jako serwera ciągłej integracji i automatyzowania kompilowania aplikacji mobilnych utworzonych za pomocą platformy Xamarin. W tym artykule opisano sposób instalowania serwera Jenkins w systemie OS X, konfigurowania go i konfigurowania zadań w celu kompilowania aplikacji platform Xamarin.iOS i Xamarin.Android po zatwierdzeniu zmian w systemie zarządzania kodem źródłowym.

Wprowadzenie do ciągłej integracji z platformą Xamarin wprowadza ciągłą integrację jako przydatną praktykę tworzenia oprogramowania, która zapewnia wczesne ostrzeżenie o uszkodzonym lub niezgodnym kodzie. Ciągła integracja umożliwia deweloperom rozwiązywanie problemów i problemów w miarę ich powstawania oraz przechowywanie oprogramowania w odpowiednim stanie na potrzeby wdrożenia. W tym przewodniku opisano sposób używania zawartości z obu dokumentów razem.

W tym przewodniku pokazano, jak zainstalować serwer Jenkins na dedykowanym komputerze z systemem OS X i skonfigurować go do automatycznego uruchamiania po uruchomieniu komputera. Po zainstalowaniu narzędzia Jenkins zainstalujemy dodatkowe wtyczki do obsługi programu MS Build. Narzędzie Jenkins obsługuje gotowe narzędzie Git. Jeśli serwer TFS jest używany do kontroli kodu źródłowego, należy również zainstalować dodatkowe wtyczki i narzędzia wiersza polecenia.

Po skonfigurowaniu serwera Jenkins i zainstalowaniu wszelkich niezbędnych wtyczek utworzymy jedno lub więcej zadań w celu skompilowania projektów platform Xamarin.Android i Xamarin.iOS. Zadanie to zbiór kroków i metadanych wymaganych do wykonania pewnej pracy. Zadanie zwykle składa się z następujących elementów:

  • Zarządzanie kodem źródłowym (SCM) — jest to wpis metadanych w plikach konfiguracji narzędzia Jenkins, który zawiera informacje na temat nawiązywania połączenia z kontrolą kodu źródłowego i pobierania plików.
  • Wyzwalacze — wyzwalacze są używane do uruchamiania zadania na podstawie określonych akcji, takich jak zatwierdzenie przez dewelopera zmian w repozytorium kodu źródłowego.
  • Instrukcje kompilacji — jest to wtyczka lub skrypt, który skompiluje kod źródłowy i utworzy plik binarny, który można zainstalować na urządzeniach przenośnych.
  • Opcjonalne akcje kompilacji — może to obejmować uruchamianie testów jednostkowych, przeprowadzanie statycznej analizy kodu, podpisywanie kodu lub uruchamianie innego zadania w celu wykonania innych zadań związanych z kompilacją.
  • Powiadomienia — zadanie może wysłać jakieś powiadomienie o stanie kompilacji.
  • Zabezpieczenia — mimo że opcjonalne, zdecydowanie zaleca się włączenie funkcji zabezpieczeń serwera Jenkins.

W tym przewodniku opisano sposób konfigurowania serwera Jenkins obejmującego każdy z tych punktów. Na koniec powinniśmy dobrze zrozumieć, jak skonfigurować i skonfigurować usługę Jenkins w celu tworzenia adresów IPA i APK dla naszych projektów mobilnych platformy Xamarin.

Wymagania

Idealny serwer kompilacji to autonomiczny komputer przeznaczony wyłącznie do tworzenia i testowania aplikacji. Dedykowany komputer zapewnia, że artefakty, które mogą być wymagane dla innych ról (takich jak serwer internetowy), nie powodują skażenia kompilacji. Jeśli na przykład serwer kompilacji działa również jako serwer internetowy, serwer internetowy może wymagać sprzecznej wersji niektórych wspólnych bibliotek. Z powodu tego konfliktu serwer internetowy może nie działać prawidłowo lub narzędzie Jenkins może tworzyć kompilacje, które nie działają podczas wdrażania dla użytkowników.

Serwer kompilacji dla aplikacji mobilnych platformy Xamarin jest konfigurowany bardzo podobnie jak stacja robocza dewelopera. Ma konto użytkownika, na którym zostaną zainstalowane narzędzia Jenkins, Visual Studio dla komputerów Mac i Xamarin.iOS i Xamarin.Android. Wszystkie certyfikaty podpisywania kodu, profile aprowizacji i magazyny kluczy muszą być również zainstalowane. Zazwyczaj konto użytkownika serwera kompilacji jest oddzielone od kont deweloperów — pamiętaj, aby zainstalować i skonfigurować wszystkie oprogramowanie, klucze i certyfikaty podczas logowania się przy użyciu konta użytkownika serwera kompilacji.

Na poniższym diagramie przedstawiono wszystkie te elementy na typowym serwerze kompilacji serwera Jenkins:

This diagram illustrates all of these elements on a typical Jenkins build server

Aplikacje systemu iOS można tworzyć i podpisywane tylko na komputerze z systemem macOS. Komputer Mac Mini jest rozsądną opcją niższego kosztu, ale każdy komputer z systemem OS X 10.10 (Yosemite) lub nowszym jest wystarczający.

Jeśli serwer TFS jest używany do kontroli kodu źródłowego, należy zainstalować program Team Explorer Wszędzie. Program Team Explorer Everywhere zapewnia międzyplatformowy dostęp do serwera TFS w terminalu w systemie macOS.

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

Instalowanie narzędzia Jenkins

Pierwszym zadaniem korzystania z narzędzia Jenkins jest zainstalowanie go. Istnieją trzy sposoby uruchamiania serwera Jenkins w systemie OS X:

  • Jako demon działa w tle.
  • Wewnątrz kontenera serwletu, takiego jak Tomcat, Jetty lub JBoss.
  • W ramach normalnego procesu uruchomionego na koncie użytkownika.

Większość tradycyjnych aplikacji ciągłej integracji działa w tle albo jako demon (w systemie OS X lub *nix) lub jako usługa (w systemie Windows). Jest to odpowiednie w scenariuszach, w których nie jest wymagana interakcja z graficznym interfejsem użytkownika i gdzie można łatwo przeprowadzić konfigurację środowiska kompilacji. Aplikacje mobilne wymagają również magazynów kluczy i certyfikatów podpisywania, które mogą być problematyczne w przypadku uruchamiania serwera Jenkins jako demona. Ze względu na te obawy ten dokument koncentruje się na trzecim scenariuszu — uruchamianiu serwera Jenkins na koncie użytkownika na serwerze kompilacji.

Jenkins.App to przydatny sposób instalowania serwera Jenkins. Jest to otoka appleScript, która upraszcza uruchamianie i zatrzymywanie serwera Jenkins. Zamiast działać w powłoce powłoki bash, narzędzie Jenkins działa jako aplikacja z ikoną w Docku, jak pokazano na poniższym zrzucie ekranu:

Instead of running in a bash shell, Jenkins runs as an app with icon in the Dock, as shown in this screenshot

Uruchamianie lub zatrzymywanie serwera Jenkins jest tak proste, jak uruchamianie lub zatrzymywanie Jenkins.App.

Aby zainstalować Jenkins.App, pobierz najnowszą wersję ze strony pobierania projektu, na zdjęciu na poniższym zrzucie ekranu:

App, download the latest version from the projects download page, pictured in this screenshot

Wyodrębnij plik zip do /Applications folderu na serwerze kompilacji i uruchom go tak samo jak każda inna aplikacja systemu OS X. Przy pierwszym uruchomieniu Jenkins.App zostanie wyświetlone okno dialogowe z informacją o pobraniu narzędzia Jenkins:

App, it will present a dialog informing you that it will download Jenkins

Po zakończeniu pobierania Jenkins.App zostanie wyświetlone kolejne okno dialogowe z pytaniem, czy chcesz dostosować uruchamianie serwera Jenkins, jak pokazano na poniższym zrzucie ekranu:

App has finished its download, it will display another dialog asking you if you would like to customize the Jenkins startup, as seen in this screenshot

Dostosowywanie serwera Jenkins jest opcjonalne i nie musi być wykonywane za każdym razem, gdy aplikacja jest uruchamiana — ustawienia domyślne serwera Jenkins będą działać w większości sytuacji.

Jeśli konieczne jest dostosowanie narzędzia Jenkins, kliknij przycisk Zmień ustawienia domyślne . Spowoduje to wyświetlenie dwóch kolejnych okien dialogowych: jednego z monitujących o parametry wiersza polecenia Języka Java, a drugiego, które pyta o parametry wiersza polecenia serwera Jenkins. Na poniższych dwóch zrzutach ekranu przedstawiono te dwa okna dialogowe:

This screenshot shows the dialog that asks for Java command line parameters.

This screenshot shows the dialog that asks for Jenkins command line parameters.

Po uruchomieniu serwera Jenkins możesz ustawić go jako element logowania, aby był uruchamiany za każdym razem, gdy użytkownik zaloguje się na komputerze. Możesz to zrobić, klikając prawym przyciskiem myszy ikonę narzędzia Jenkins w obszarze Dock i wybierając pozycję Opcje... > Otwórz przy logowaniu, jak pokazano na poniższym zrzucie ekranu:

You can do this by right-clicking on the Jenkins icon in the Dock and choosing OptionsOpen at Login, as shown in this screenshot

Spowoduje to automatyczne uruchomienie Jenkins.App za każdym razem, gdy użytkownik zaloguje się, ale nie po uruchomieniu komputera. Istnieje możliwość określenia konta użytkownika, za pomocą którego system OS X będzie automatycznie logować się podczas rozruchu. Otwórz preferencje systemowe i wybierz ikonę Użytkownicy i grupy, jak pokazano na poniższym zrzucie ekranu:

Open the System Preferences, and select the User Groups icon as shown in this screenshot

Kliknij przycisk Opcje logowania, a następnie wybierz konto, którego system OS X będzie używał do logowania podczas rozruchu.

W tym momencie narzędzie Jenkins zostało zainstalowane. Jeśli jednak chcemy tworzyć aplikacje mobilne platformy Xamarin, musimy zainstalować niektóre wtyczki.

Instalowanie wtyczek

Po zakończeniu Jenkins.App instalatora uruchomi narzędzie Jenkins i uruchomi przeglądarkę internetową przy użyciu adresu URL http://localhost:8080, jak pokazano na poniższym zrzucie ekranu:

8080, as shown in this screenshot

Na tej stronie wybierz pozycję Jenkins Zarządzaj wtyczkami jenkins >> z menu w lewym górnym rogu, jak pokazano na poniższym zrzucie ekranu:

From this page, select Jenkins Manage Jenkins Manage Plugins from the menu in the upper left hand corner

Spowoduje to wyświetlenie strony Menedżera wtyczek narzędzia Jenkins. Po kliknięciu karty Dostępne zostanie wyświetlona lista ponad 600 wtyczek, które można pobrać i zainstalować. Jest to na zdjęciu na poniższym zrzucie ekranu:

If you click on the Available tab, you will see a list of over 600 plugins that can be downloaded and installed

Przewijanie wszystkich 600 wtyczek w celu znalezienia kilku może być żmudne i podatne na błędy. Usługa Jenkins udostępnia pole wyszukiwania Filtr w prawym górnym rogu interfejsu. Użycie tego pola Filtr do wyszukiwania upraszcza lokalizowanie i instalowanie jednej lub wszystkich następujących wtyczek:

  • Wtyczka programu JEnkins MSBuild — ta wtyczka umożliwia tworzenie programu Visual Studio i Visual Studio dla komputerów Mac rozwiązań (.sln) i projektów (csproj).
  • Wtyczka iniektora środowiska — jest to opcjonalna, ale przydatna wtyczka, która umożliwia ustawianie zmiennych środowiskowych na poziomie zadania i kompilacji. Zapewnia również dodatkową ochronę zmiennych, takich jak hasła używane do podpisywania aplikacji. Czasami jest on skracany jako EnvInject Plugin .
  • Wtyczka serwera Team Foundation Server — jest to opcjonalna wtyczka, która jest wymagana tylko wtedy, gdy używasz serwera Team Foundation Server lub usługi Team Foundation Services do kontroli kodu źródłowego.

Usługa Jenkins obsługuje usługę Git bez dodatkowych wtyczek.

Po zainstalowaniu wszystkich wtyczek należy ponownie uruchomić narzędzie Jenkins i skonfigurować ustawienia globalne dla każdej wtyczki. Ustawienia globalne wtyczki można znaleźć, wybierając pozycję Jenkins Manage Jenkins Configure System (Zarządzanie systemem Jenkins >>) w lewym górnym rogu, jak pokazano na poniższym zrzucie ekranu:

The global settings for a plugin can be found by selecting Jenkins / Manage Jenkins / Configure System from the upper left hand corner

Po wybraniu tej opcji menu nastąpi przekierowanie do strony Konfigurowanie systemu [Jenkins]. Ta strona zawiera sekcje konfigurowania samego serwera Jenkins i ustawiania niektórych wartości globalnych wtyczek. Poniższy zrzut ekranu przedstawia przykład tej strony:

This screenshot illustrates an example of this page

Konfigurowanie wtyczki MSBuild

Wtyczka MSBuild musi być skonfigurowana tak, aby korzystała z pliku /Library/Frameworks/Mono.framework/Commands/xbuild, aby skompilować pliki rozwiązania i projektu Visual Studio dla komputerów Mac. Przewiń w dół stronę Konfigurowanie systemu [Jenkins] do momentu wyświetlenia przycisku Dodaj program MSBuild , jak pokazano na poniższym zrzucie ekranu:

Scroll down the Configure System Jenkins page until the Add MSBuild button appears

Kliknij ten przycisk i wypełnij pola Nazwa i Ścieżka do msBuild w wyświetlonym formularzu. Nazwa instalacji programu MSBuild powinna być czymś znaczącym, a ścieżka do programu MSBuild powinna być ścieżką do xbuild, która jest zazwyczaj ścieżką /Library/Frameworks/Mono.framework/Commands/xbuild. Po zapisaniu zmian przez kliknięcie przycisku Zapisz lub Zastosuj w dolnej części strony narzędzie Jenkins będzie mogło skompilować xbuild rozwiązania.

Konfigurowanie wtyczki TFS

Ta sekcja jest obowiązkowa, jeśli zamierzasz używać serwera TFS do kontroli kodu źródłowego.

Aby stacja robocza z systemem macOS wchodziła w interakcję z serwerem TFS, program Team Explorer Wszędzie musi być zainstalowany na stacji roboczej. Team Explorer Everywhere to zestaw narzędzi firmy Microsoft, który zawiera międzyplatformowego klienta wiersza polecenia na potrzeby uzyskiwania dostępu do serwera TFS. Program Team Explorer Everywhere można pobrać z firmy Microsoft i zainstalować w trzech krokach:

  1. Rozpakuj plik archiwum do katalogu, który jest dostępny dla konta użytkownika. Możesz na przykład rozpakować plik do pliku ~/tee.

  2. Skonfiguruj powłokę lub ścieżkę system, aby uwzględnić folder zawierający pliki, które zostały rozpakowane w kroku 1 powyżej. Przykład:

    echo export PATH~/tee/:$PATH' >> ~/.bash_profile
    
  3. Aby potwierdzić, że program Team Explorer Everywhere jest zainstalowany, otwórz sesję terminalu tf i wykonaj polecenie . Jeśli tf jest prawidłowo skonfigurowany, w sesji terminalu będą widoczne następujące dane wyjściowe:

    $ tf
    Team Explorer Everywhere Command Line Client (version 11.0.0.201306181526)
    
    Available commands and their options:
    

Po zainstalowaniu klienta wiersza polecenia dla serwera TFS należy skonfigurować narzędzie Jenkins z pełną ścieżką do tf klienta wiersza polecenia. Przewiń w dół stronę Konfigurowanie systemu [Jenkins] do momentu znalezienia sekcji Team Foundation Server, jak pokazano na poniższym zrzucie ekranu:

Scroll down the Configure System Jenkins page until you find the Team Foundation Server section

Wprowadź pełną ścieżkę tf do polecenia, a następnie kliknij przycisk Zapisz .

Konfigurowanie zabezpieczeń usługi Jenkins

Po pierwszym zainstalowaniu narzędzie Jenkins ma wyłączone zabezpieczenia, dzięki czemu każdy użytkownik może skonfigurować i uruchomić dowolne zadanie anonimowo. W tej sekcji opisano sposób konfigurowania zabezpieczeń przy użyciu bazy danych użytkowników serwera Jenkins w celu skonfigurowania uwierzytelniania i autoryzacji.

Ustawienia zabezpieczeń można znaleźć, wybierając pozycję Jenkins Manage Jenkins Configure Global Security (Zarządzanie usługą Jenkins >> Konfiguruj zabezpieczenia globalne), jak pokazano na poniższym zrzucie ekranu:

Security settings can be found by selecting Jenkins / Manage Jenkins / Configure Global Security

Na stronie Konfigurowanie zabezpieczeń globalnych zaznacz pole wyboru Włącz zabezpieczenia i powinien zostać wyświetlony formularz Kontrola dostępu podobny do następnego zrzutu ekranu:

On the Configure Global Security page, check the Enable Security checkbox and the Access Control form should appear, similar to this screenshot

Przełącz przycisk radiowy dla własnej bazy danych użytkownika narzędzia Jenkins w sekcji Obszar zabezpieczeń i upewnij się, że opcja Zezwalaj użytkownikom na rejestrację jest również zaznaczona, jak pokazano na poniższym zrzucie ekranu:

Toggle the radio button for Jenkins own user database in the Security Realm Section, and ensure that Allow users to sign up is also checked

Na koniec uruchom ponownie usługę Jenkins i utwórz nowe konto. Pierwsze utworzone konto to konto główne, które zostanie automatycznie podniesione do administratora. Wróć do strony Konfigurowanie zabezpieczeń globalnych i zaznacz przycisk radiowy Zabezpieczenia oparte na macierzy. Konto główne powinno mieć pełny dostęp, a konto anonimowe powinno mieć dostęp tylko do odczytu, jak pokazano na poniższym zrzucie ekranu:

The root account should be granted full access, and the anonymous account should be given read-only access

Po zapisaniu tych ustawień i ponownym uruchomieniu serwera Jenkins zabezpieczenia zostaną włączone.

Wyłączanie zabezpieczeń

W przypadku zapomnianego hasła lub blokady w całej usłudze Jenkins można wyłączyć zabezpieczenia, wykonując następujące kroki:

  1. Zatrzymaj narzędzie Jenkins. Jeśli używasz Jenkins.app, możesz to zrobić, klikając prawym przyciskiem myszy ikonę Jenkins.App w docku i wybierając polecenie Zamknij z wyświetlonego menu:

    App icon in the Dock, and selecting Quit from the menu that pops up

  2. Otwórz plik ~/.jenkins/config.xml w edytorze tekstów.

  3. Zmień wartość <usesecurity></usesecurity> elementu z true na false.

  4. <authorizationstrategy></authorizationstrategy> Usuń elementy i <securityrealm></securityrealm> z pliku.

  5. Uruchom ponownie narzędzie Jenkins.

Konfigurowanie zadania

Na najwyższym poziomie narzędzie Jenkins organizuje wszystkie zadania wymagane do kompilowania oprogramowania do zadania. Zadanie zawiera również skojarzone z nim metadane, udostępniając informacje o kompilacji, takie jak pobieranie kodu źródłowego, częstotliwość uruchamiania kompilacji, wszelkie specjalne zmienne niezbędne do kompilowania oraz sposób powiadamiania deweloperów, jeśli kompilacja zakończy się niepowodzeniem.

Zadania są tworzone, wybierając pozycję Jenkins > New Job (Nowe zadanie ) z menu w prawym górnym rogu, jak pokazano na poniższym zrzucie ekranu:

Jobs are created by selecting Jenkins New Job from the menu in the upper right hand corner

Spowoduje to wyświetlenie strony Nowe zadanie [Jenkins]. Wprowadź nazwę zadania i wybierz przycisk radiowy Kompiluj projekt oprogramowania w stylu swobodnym. Poniższy zrzut ekranu przedstawia przykład tego:

Enter a name for the job, and select the Build a free-style software project radio button

Kliknięcie przycisku OK umożliwia wyświetlenie strony konfiguracji zadania. Powinno to wyglądać podobnie do poniższego zrzutu ekranu:

This should resemble this screenshot

Usługa Jenkins organizuje zadania w katalogu na dysku twardym znajdującym się w następującej ścieżce: ~/.jenkins/jobs/[NAZWA ZADANIA]

Ten folder zawiera wszystkie pliki i artefakty specyficzne dla zadania, takie jak dzienniki, pliki konfiguracji i kod źródłowy, który należy skompilować.

Po utworzeniu zadania początkowego należy go skonfigurować przy użyciu co najmniej jednego z następujących elementów:

  • Należy określić system zarządzania kodem źródłowym.
  • Do projektu należy dodać co najmniej jedną akcję kompilacji. Są to kroki lub zadania wymagane do skompilowania aplikacji.
  • Zadanie musi mieć przypisany jeden wyzwalacz kompilacji — zestaw instrukcji informujących usługę Jenkins, jak często pobierać kod i kompilować ostateczny projekt.

Konfigurowanie kontroli kodu źródłowego

Pierwsze zadanie, które wykonuje Jenkins, to pobranie kodu źródłowego z systemu zarządzania kodem źródłowym. Narzędzie Jenkins obsługuje obecnie wiele popularnych systemów zarządzania kodem źródłowym. W tej sekcji omówiono dwa popularne systemy: Git i Team Foundation Server. Każdy z tych systemów zarządzania kodem źródłowym został omówiony bardziej szczegółowo w poniższych sekcjach.

Używanie narzędzia Git do kontroli kodu źródłowego

Jeśli używasz serwera TFS do kontroli kodu źródłowego, pomiń tę sekcję i przejdź do następnej sekcji przy użyciu serwera TFS.

Narzędzie Jenkins obsługuje gotowe rozwiązanie Git — żadne dodatkowe wtyczki nie są niezbędne. Aby użyć usługi Git, kliknij przycisk radiowy Git i wprowadź adres URL repozytorium Git, jak pokazano na poniższym zrzucie ekranu:

To use Git, click on the Git radio button and enter the URL for the Git repository

Po zapisaniu zmian konfiguracja usługi Git zostanie ukończona.

Używanie serwera TFS do zarządzania kodem źródłowym

Ta sekcja dotyczy tylko użytkowników serwera TFS.

Kliknij przycisk radiowy Team Foundation Server i powinna zostać wyświetlona sekcja Konfiguracja serwera TFS, podobnie jak na poniższym zrzucie ekranu:

Click on the Team Foundation Server radio button and the TFS configuration section should appear

Podaj niezbędne informacje dla serwera TFS. Poniższy zrzut ekranu przedstawia przykład wypełnionego formularza:

This screenshot shows an example of the completed form

Testowanie konfiguracji kontroli kodu źródłowego

Po skonfigurowaniu odpowiedniej kontroli kodu źródłowego kliknij przycisk Zapisz , aby zapisać zmiany. Spowoduje to powrót do strony głównej zadania, która będzie wyglądać podobnie do poniższego zrzutu ekranu:

This will return you to the home page for the job, which will resemble this screenshot

Najprostszym sposobem sprawdzenia, czy kontrola kodu źródłowego jest prawidłowo skonfigurowana, jest ręczne wyzwolenie kompilacji, mimo że nie określono żadnych akcji kompilacji. Aby ręcznie uruchomić kompilację, strona główna zadania ma link Kompiluj teraz w menu po lewej stronie, jak pokazano na poniższym zrzucie ekranu:

To start a build manually, the home page of the job has a Build Now link in the menu on the left hand side

Po uruchomieniu kompilacji w oknie dialogowym Historia kompilacji zostanie wyświetlony niebieski okrąg, pasek postępu, numer kompilacji i godzina rozpoczęcia kompilacji, podobnie jak na poniższym zrzucie ekranu:

When a build has been started, the Build History dialog displays a flashing blue circle, a progress bar, the build number and the time that the build started

Jeśli zadanie zakończy się pomyślnie, zostanie wyświetlone niebieskie kółko. Jeśli zadanie zakończy się niepowodzeniem, zostanie wyświetlone czerwone kółko.

Aby ułatwić rozwiązywanie problemów, które mogą wystąpić w ramach kompilacji, narzędzie Jenkins przechwytuje wszystkie dane wyjściowe konsoli zadania. Aby wyświetlić dane wyjściowe konsoli, kliknij zadanie w obszarze Historia kompilacji, a następnie w linku Dane wyjściowe konsoli w menu po lewej stronie. Poniższy zrzut ekranu przedstawia link Dane wyjściowe konsoli, a także niektóre dane wyjściowe z pomyślnego zadania:

This screenshot shows the Console Output link, as well as some of the output from a successful job

Lokalizacja artefaktów kompilacji

Narzędzie Jenkins pobierze cały kod źródłowy do specjalnego folderu o nazwie obszar roboczy. Ten katalog można znaleźć w folderze w następującej lokalizacji:

~/.jenkins/jobs/[JOB NAME]/workspace

Ścieżka do obszaru roboczego będzie przechowywana w zmiennej środowiskowej o nazwie $WORKSPACE.

Można przeglądać folder obszaru roboczego w narzędziu Jenkins, przechodząc do strony docelowej zadania, a następnie klikając link Obszar roboczy w menu po lewej stronie. Poniższy zrzut ekranu przedstawia przykład obszaru roboczego dla zadania o nazwie HelloWorld:

This screenshot shows an example of the workspace for a job named HelloWorld

Wyzwalacze kompilacji

Istnieje kilka różnych strategii inicjowania kompilacji w usłudze Jenkins — są one nazywane wyzwalaczami kompilacji. Wyzwalacz kompilacji pomaga usłudze Jenkins zdecydować, kiedy uruchomić zadanie i skompilować projekt. Dwa z bardziej typowych wyzwalaczy kompilacji to:

  • Kompilowanie okresowo — ten wyzwalacz powoduje, że usługa Jenkins uruchamia zadanie w określonych odstępach czasu, na przykład co dwie godziny lub o północy w dni robocze. Kompilacja zostanie uruchomiona niezależnie od tego, czy nastąpiły jakiekolwiek zmiany w repozytorium kodu źródłowego.
  • Sondowanie SCM — ten wyzwalacz regularnie sonduje kontrolę kodu źródłowego. Jeśli jakiekolwiek zmiany zostały zatwierdzone w repozytorium kodu źródłowego, narzędzie Jenkins uruchomi nową kompilację.

Sondowanie SCM jest popularnym wyzwalaczem, ponieważ udostępnia szybką opinię, gdy deweloper zatwierdza zmiany, które powodują przerwanie kompilacji. Jest to przydatne w przypadku zgłaszania alertów zespołom, że niektóre ostatnio zatwierdzone kody powodują problemy i umożliwiają deweloperom rozwiązanie problemu, gdy zmiany są nadal świeże.

Okresowe kompilacje są często używane do tworzenia wersji aplikacji, która może być dystrybuowana do testerów. Na przykład okresowa kompilacja może być zaplanowana na piątek wieczorem, aby członkowie zespołu QA mogli przetestować pracę w poprzednim tygodniu.

Kompilowanie aplikacji platformy Xamarin.iOS

Projekty platformy Xamarin.iOS można kompilować w wierszu polecenia przy użyciu polecenia xbuild lub msbuild. Polecenie powłoki zostanie wykonane w kontekście konta użytkownika z uruchomionym serwerem Jenkins. Należy pamiętać, że konto użytkownika ma dostęp do profilu aprowizacji, aby aplikacja mogła być prawidłowo spakowana do dystrybucji. Istnieje możliwość dodania tego polecenia powłoki do strony konfiguracji zadania.

Przewiń w dół do sekcji Kompilacja. Kliknij przycisk Dodaj krok kompilacji i wybierz pozycję Wykonaj powłokę, jak pokazano na poniższym zrzucie ekranu:

Click the Add build step button and select Execute shell

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.

Tworzenie projektu platformy Xamarin.Android

Kompilowanie projektu platformy Xamarin.Android jest bardzo podobne do tworzenia projektu platformy Xamarin.iOS. Aby utworzyć plik APK na podstawie projektu platformy Xamarin.Android, należy skonfigurować narzędzie Jenkins w celu wykonania następujących dwóch kroków:

  • Kompilowanie projektu przy użyciu wtyczki MSBuild
  • Podpisywanie i zip wyrównuje plik APK z prawidłowym magazynem kluczy wydania.

Te dwa kroki zostaną szczegółowo omówione w dwóch następnych sekcjach.

Tworzenie pakietu APK

Kliknij przycisk Dodaj krok kompilacji i wybierz pozycję Kompiluj projekt lub rozwiązanie programu Visual Studio przy użyciu programu MSBuild, jak pokazano na poniższym zrzucie ekranu:

Creating the APK Click on the Add build step button, and select Build a Visual Studio project or solution using MSBuild

Po dodaniu kroku kompilacji do projektu wypełnij wyświetlone pola formularza. Poniższy zrzut ekranu to jeden z przykładów wypełnionego formularza:

Once the build step is added to the project, fill in the form fields that appear

Ten krok kompilacji zostanie wykonany xbuild w folderze $WORKSPACE . Plik kompilacji MSBuild jest ustawiony na plik Xamarin.Android.csproj . Argumenty wiersza polecenia określają kompilację wydania docelowego PackageForAndroid. Produktem tego kroku będzie apk, który znajduje się w następującej lokalizacji:

$WORKSPACE/[PROJECT NAME]/bin/Release

Poniższy zrzut ekranu przedstawia przykład tego pakietu APK:

This screenshot shows an example of this APK

Ten plik APK nie jest gotowy do wdrożenia, ponieważ nie został podpisany przy użyciu prywatnego magazynu kluczy i musi być wyrównany do pliku zip.

Podpisywanie i zipalignowanie pakietu APK dla wydania

Podpisywanie i spakowanie pakietu APK to technicznie dwa oddzielne zadania wykonywane przez dwa oddzielne narzędzia wiersza polecenia z zestawu SDK systemu Android. Jednak wygodne jest wykonanie ich w jednej akcji kompilacji. Aby uzyskać więcej informacji na temat podpisywania i zipalignowania pakietu APK, zobacz dokumentację platformy Xamarin dotyczącą przygotowywania aplikacji systemu Android do wydania.

Oba te polecenia wymagają parametrów wiersza polecenia, które mogą się różnić od projektu do projektu. Ponadto niektóre z tych parametrów wiersza polecenia to hasła, które nie powinny być wyświetlane w danych wyjściowych konsoli podczas uruchamiania kompilacji. Niektóre z tych parametrów wiersza polecenia będą przechowywane w zmiennych środowiskowych. Zmienne środowiskowe wymagane do podpisywania i/lub wyrównywania zip zostały opisane w poniższej tabeli:

Zmienna środowiskowa opis
KEYSTORE_FILE Jest to ścieżka do magazynu kluczy do podpisywania pliku APK
KEYSTORE_ALIAS Klucz w magazynie kluczy, który będzie używany do podpisywania pliku APK.
INPUT_APK Plik APK utworzony przez xbuildprogram .
SIGNED_APK Podpisany plik APK wyprodukowany przez jarsignerprogram .
FINAL_APK To jest zip wyrównany APK, który jest produkowany przez zipalign.
STORE_PASS Jest to hasło używane do uzyskiwania dostępu do zawartości magazynu kluczy do śpiewania pliku.

Zgodnie z opisem w sekcji Wymagania te zmienne środowiskowe można ustawić podczas kompilacji przy użyciu wtyczki EnvInject. Zadanie powinno mieć dodany nowy krok kompilacji na podstawie zmiennych środowiskowych Wstrzykiwanie, jak pokazano na następnym zrzucie ekranu:

The job should have a new build step added based on the Inject environment variables

W wyświetlonym polu Formularz zawartości właściwości zostaną dodane zmienne środowiskowe, po jednym na wiersz w następującym formacie:

ENVIRONMENT_VARIABLE_NAME = value

Poniższy zrzut ekranu przedstawia zmienne środowiskowe wymagane do podpisania pliku APK:

This screenshot shows the environment variables that are required for signing the APK

Zwróć uwagę, że niektóre zmienne środowiskowe dla plików APK są oparte na zmiennej środowiskowej WORKSPACE .

Końcowa zmienna środowiskowa to hasło umożliwiające dostęp do zawartości magazynu kluczy: STORE_PASS. Hasła są wartościami poufnymi, które powinny być zasłonięte lub pominięte w plikach dziennika. Wtyczkę EnvInject można skonfigurować do ochrony tych wartości, aby nie były wyświetlane w dziennikach.

Bezpośrednio przed sekcją Kompilacja konfiguracji zadania jest sekcja Środowisko kompilacji. Po przełączeniu pola wyboru Wstrzykiwanie haseł niektóre pola formularza będą wyświetlane. Te pola formularza służą do przechwytywania nazwy i wartości zmiennej środowiskowej. Poniższy zrzut ekranu to przykład dodawania zmiennej środowiskowej STORE_PASS :

This screenshot is an example of adding the STOREPASS environment variable

Po zainicjowaniu zmiennych środowiskowych następnym krokiem jest dodanie kroku kompilacji do podpisywania i zip wyrównywania pliku APK. Natychmiast po kroku kompilacji w celu wstawienia zmiennych środowiskowych będzie kolejna kompilacja polecenia Execute shell , która zostanie wykonana jarsigner i zipalign. Każde polecenie zajmie jeden wiersz, jak pokazano w poniższym fragmencie kodu:

jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore $KEYSTORE_FILE -storepass $STORE_PASS -signedjar $SIGNED_APK $INPUT_APK $KEYSTORE_ALIAS
zipalign -f -v 4 $SIGNED_APK $FINAL_APK

Poniższy zrzut ekranu przedstawia przykład wprowadzania jarsigner poleceń i zipalign w kroku :

This screenshot shows an example of how to enter the jarsigner and zipalign commands into the step

Po utworzeniu wszystkich akcji kompilacji dobrym rozwiązaniem jest wyzwolenie kompilacji ręcznej w celu sprawdzenia, czy wszystko działa. Jeśli kompilacja zakończy się niepowodzeniem, dane wyjściowe konsoli powinny zostać przejrzyone, aby uzyskać informacje na temat przyczyn niepowodzenia kompilacji.

Przesyłanie testów do chmury testowej

Testy automatyczne można przesłać do testowej chmury przy użyciu poleceń powłoki. Aby uzyskać więcej informacji na temat konfigurowania przebiegu testowego w chmurze Xamarin Test, zobacz Przygotowywanie aplikacji platformy Xamarin.Android i Przygotowywanie aplikacji platformy Xamarin.iOS.

Podsumowanie

W tym przewodniku wprowadziliśmy usługę Jenkins jako serwer kompilacji w systemie macOS i skonfigurowaliśmy go do kompilowania i przygotowywania aplikacji mobilnych platformy Xamarin do wydania. Na komputerze z systemem macOS zainstalowano narzędzie Jenkins wraz z kilkoma wtyczkami obsługującymi proces kompilacji. Utworzyliśmy i skonfigurowaliśmy zadanie, które będzie ściągać kod z serwera TFS lub Git, a następnie kompilować ten kod w aplikacji gotowej do wydania. Omówiliśmy również dwa różne sposoby planowania uruchamiania zadań.