Использование Jenkins с Xamarin

В этом руководстве показано, как настроить Jenkins в качестве сервера непрерывной интеграции и автоматизировать компиляцию мобильных приложений, созданных с помощью Xamarin. В нем описывается, как установить Jenkins в OS X, настроить его и настроить задания для компиляции приложений Xamarin.iOS и Xamarin.Android при фиксации изменений в системе управления исходным кодом.

Введение в непрерывную интеграцию с Xamarin представляет непрерывную интеграцию в качестве полезной практики разработки программного обеспечения, которая обеспечивает раннее предупреждение о неисправном или несовместимом коде. CI позволяет разработчикам решать проблемы и проблемы, возникающие при их возникновении, и поддерживать программное обеспечение в подходящем состоянии для развертывания. В этом пошаговом руководстве описывается, как использовать содержимое из обоих документов вместе.

В этом руководстве показано, как установить Jenkins на выделенном компьютере под управлением OS X и настроить его для автоматического запуска компьютера. После установки Jenkins мы установим дополнительные подключаемые модули для поддержки MS Build. Jenkins поддерживает Git вне поля. Если TFS используется для управления исходным кодом, необходимо также установить дополнительные подключаемые модули и служебные программы командной строки.

После настройки Jenkins и установки всех необходимых подключаемых модулей мы создадим одно или несколько заданий для компиляции проектов Xamarin.Android и Xamarin.iOS. Задание — это коллекция шагов и метаданных, необходимых для выполнения некоторых действий. Обычно задание состоит из следующих элементов:

  • Управление исходным кодом (SCM) — это запись метаданных в файлах конфигурации Jenkins, содержащих сведения о подключении к системе управления исходным кодом и о том, какие файлы необходимо получить.
  • Триггеры — триггеры используются для запуска задания на основе определенных действий, таких как при фиксации разработчиком изменений в репозитории исходного кода.
  • Инструкции по сборке— это подключаемый модуль или скрипт, который компилирует исходный код и создает двоичный файл, который можно установить на мобильных устройствах.
  • Необязательные действия сборки. Это может включать выполнение модульных тестов, выполнение статического анализа кода, подписывание кода или запуск другого задания для выполнения других связанных с сборкой работ.
  • Уведомления— задание может отправлять какое-то уведомление о состоянии сборки.
  • Безопасность — хотя и необязательно, настоятельно рекомендуется включить функции безопасности Jenkins.

В этом руководстве описано, как настроить сервер Jenkins, охватывающий каждую из этих точек. В конце концов мы должны иметь хорошее представление о настройке и настройке Jenkins для создания IPA и APK для наших мобильных проектов Xamarin.

Требования

Идеальный сервер сборки — это автономный компьютер, предназначенный исключительно для создания и, возможно, тестирования приложения. Выделенный компьютер гарантирует, что артефакты, которые могут потребоваться для других ролей (например, веб-сервера), не загрязняют сборку. Например, если сервер сборки также выступает в качестве веб-сервера, веб-сервер может требовать конфликтующую версию какой-то общей библиотеки. Из-за этого конфликта веб-сервер может работать неправильно или Jenkins может создавать сборки, которые не работают при развертывании для пользователей.

Сервер сборки для мобильных приложений Xamarin очень похож на рабочую станцию разработчика. У него есть учетная запись пользователя, в которой будут установлены Jenkins, Visual Studio для Mac и Xamarin.iOS и Xamarin.Android. Все сертификаты подписывания кода, профили подготовки и хранилища ключей должны быть установлены также. Как правило, учетная запись пользователя сервера сборки отличается от учетных записей разработчика. Не забудьте установить и настроить все программное обеспечение, ключи и сертификаты при входе в учетную запись пользователя сервера сборки.

На следующей схеме показаны все эти элементы на типичном сервере сборки Jenkins:

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

Приложения iOS можно создавать и выполнять только на компьютере под управлением macOS. Mac Mini является разумным вариантом более низкой стоимости, но любой компьютер, способный работать под управлением OS X 10.10 (Yosemite) или выше, достаточно.

Если TFS используется для управления исходным кодом, необходимо установить Team Обозреватель Везде. Команда Обозреватель Везде предоставляет кроссплатформенный доступ к TFS в терминале в macOS.

Настройка брандмауэра

Чтобы тесты были отправлены в Xamarin Test Cloud, компьютер, отправляющий тесты, должен иметь возможность взаимодействовать с серверами Test Cloud. Брандмауэры должны быть настроены для разрешения сетевого трафика на серверы, расположенные в testcloud.xamarin.com на портах 80 и 443. Эта конечная точка управляется DNS, и IP-адрес подлежит изменению.

В некоторых ситуациях тест (или устройство, на котором выполняется тест), должен взаимодействовать с веб-серверами, защищенными брандмауэром. В этом сценарии брандмауэр должен быть настроен для разрешения трафика со следующих IP-адресов:

  • 195.249.159.238
  • 195.249.159.239

Установка Jenkins

Первая задача использования Jenkins — установить его. Существует три способа запуска Jenkins в OS X:

  • Управляющая программа выполняется в фоновом режиме.
  • Внутри контейнера сервлета, например Tomcat, Jetty или JBoss.
  • Как обычный процесс, выполняемый под учетной записью пользователя.

Большинство традиционных приложений непрерывной интеграции выполняются в фоновом режиме как управляющая программа (в ОС X или *nix) или как услуга (в Windows). Это подходит для сценариев, когда не требуется взаимодействие с графическим интерфейсом и где можно легко выполнить настройку среды сборки. Для мобильных приложений также требуются хранилища ключей и сертификаты подписывания, которые могут быть проблематичны для доступа при запуске Jenkins в качестве управляющей программы. Из-за этих проблем в этом документе основное внимание уделяется третьему сценарию— запуск Jenkins под учетной записью пользователя на сервере сборки.

Jenkins.App это удобный способ установки Jenkins. Это оболочка AppleScript, которая упрощает запуск и остановку сервера Jenkins. Вместо запуска в оболочке Bash Jenkins запускается как приложение со значком в док-станции, как показано на следующем снимке экрана:

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

Запуск или остановка Jenkins так же просто, как запуск или остановка Jenkins.App.

Чтобы установить Jenkins.App, скачайте последнюю версию на странице скачивания проекта, на фото на снимке экрана ниже:

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

Извлеките ZIP-файл /Applications в папку на сервере сборки и запустите его так же, как и любое другое приложение OS X. При первом запуске Jenkins.App появится диалоговое окно с сообщением о том, что он скачивает Jenkins:

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

После завершения загрузки Jenkins.App отобразится другое диалоговое окно с запросом на настройку запуска Jenkins, как показано на следующем снимке экрана:

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

Настройка Jenkins является необязательным и не должна выполняться при каждом запуске приложения — параметры по умолчанию для Jenkins будут работать для большинства ситуаций.

Если необходимо настроить Jenkins, нажмите кнопку "Изменить значения по умолчанию ". В этом случае вы увидите два последовательных диалога: один из них запрашивает параметры командной строки Java и другой, который запрашивает параметры командной строки Jenkins. На следующих двух снимках экрана показаны следующие два диалога:

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

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

После запуска Jenkins может потребоваться задать его в качестве элемента входа, чтобы он запускал каждый раз, когда пользователь войдет на компьютер. Это можно сделать, щелкнув правой кнопкой мыши значок Jenkins в док-станции и выбрав параметры... > Откройте при входе, как показано на следующем снимке экрана:

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

Это приведет к автоматическому запуску Jenkins.App при каждом входе пользователя, но не при загрузке компьютера. Можно указать учетную запись пользователя, которую ОС X будет использовать для автоматического входа во время загрузки. Откройте системные настройки и выберите значок "Пользователи и группы", как показано на снимке экрана:

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

Нажмите кнопку "Параметры входа", а затем выберите учетную запись, которую OS X будет использовать для входа во время загрузки.

На этом этапе Дженкинс был установлен. Однако если мы хотим создать мобильные приложения Xamarin, необходимо установить некоторые подключаемые модули.

Установка подключаемых модулей

После завершения установщика Jenkins.App он запустит Jenkins и запустит веб-браузер с URL-адресом http://localhost:8080, как показано на снимке экрана ниже:

8080, as shown in this screenshot

На этой странице выберите Jenkins Manage Jenkins > Manage Plugins > в меню в левом верхнем углу, как показано на снимке экрана ниже:

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

Откроется страница диспетчера подключаемых модулей Jenkins. Если щелкнуть вкладку "Доступно", вы увидите список более 600 подключаемых модулей, которые можно скачать и установить. На снимке экрана ниже показано следующее:

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

Прокручивая все 600 подключаемых модулей, чтобы найти несколько из них может быть мученным и подверженным ошибкам. Jenkins предоставляет поле поиска фильтра в правом верхнем углу интерфейса. Это поле фильтра упрощает поиск и установку одного или всех следующих подключаемых модулей:

  • Подключаемый модуль Jenkins MSBuild— этот подключаемый модуль позволяет создавать решения Visual Studio и Visual Studio для Mac (.sln) и проекты (CSPROJ).
  • Подключаемый модуль внедрения среды — это необязательный, но полезный подключаемый модуль, который позволяет задать переменные среды на уровне задания и сборки. Кроме того, она обеспечивает дополнительную защиту для переменных, таких как пароли, используемые для подписывания приложения. Иногда он сокращен как подключаемый модуль EnvInject.
  • Подключаемый модуль Team Foundation Server — это необязательный подключаемый модуль, который требуется только при использовании Team Foundation Server или Team Foundation Services для управления исходным кодом.

Jenkins поддерживает Git без дополнительных подключаемых модулей.

После установки всех подключаемых модулей необходимо перезапустить Jenkins и настроить глобальные параметры для каждого подключаемого модуля. Глобальные параметры подключаемого модуля можно найти, выбрав Jenkins Manage Jenkins >> Configure System в левом верхнем углу, как показано на снимке экрана ниже:

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

При выборе этого параметра меню вы перейдете на страницу настройки системы [Jenkins] . Эта страница содержит разделы, чтобы настроить сам Jenkins и задать некоторые из глобальных значений подключаемого модуля. На снимках экрана ниже показан пример этой страницы:

This screenshot illustrates an example of this page

Настройка подключаемого модуля MSBuild

Подключаемый модуль MSBuild должен быть настроен на использование /Library/Frameworks/Mono.framework/Commands/xbuild для компиляции Visual Studio для Mac файлов решений и проектов. Прокрутите страницу настройки системы [Jenkins] , пока не появится кнопка "Добавить MSBuild ", как показано на снимке экрана ниже:

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

Нажмите эту кнопку и заполните поля "Имя и путь к MSBuild " в появившемся виде. Имя установки MSBuild должно быть чем-то значимым, а путь к MSBuild должен быть путемxbuild, к которому обычно является /Library/Frameworks/Mono.framework/Commands/xbuild. После сохранения изменений, нажав кнопку "Сохранить" или "Применить" в нижней части страницы, Jenkins сможет использовать xbuild для компиляции решений.

Настройка подключаемого модуля TFS

Этот раздел является обязательным, если вы планируете использовать TFS для управления исходным кодом.

Чтобы рабочая станция macOS взаимодействовала с сервером TFS, команда Обозреватель везде должна быть установлена на рабочей станции. Команда Обозреватель Везде — это набор средств от Корпорации Майкрософт, который включает в себя кроссплатформенный клиент командной строки для доступа к TFS. Команда Обозреватель везде можно скачать из Корпорации Майкрософт и установить в трех шагах:

  1. Распакуируйте архивный файл в каталог, доступный для учетной записи пользователя. Например, можно распакуировать файл в ~/tee.

  2. Настройте оболочку или системный путь, чтобы включить папку, содержащую файлы, распакуированные на шаге выше. Например,

    echo export PATH~/tee/:$PATH' >> ~/.bash_profile
    
  3. Чтобы убедиться, что команда Обозреватель везде установлена, откройте сеанс терминала и выполните tf команду. Если tf настроен правильно, вы увидите следующие выходные данные в сеансе терминала:

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

После установки клиента командной строки для TFS необходимо настроить Jenkins с полным путем к клиенту командной tf строки. Прокрутите страницу настройки системы [Jenkins] , пока не найдете раздел Team Foundation Server, как показано на следующем снимке экрана:

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

Введите полный путь к команде tf и нажмите кнопку "Сохранить ".

Настройка безопасности Jenkins

При первом установке Jenkins отключена безопасность, поэтому любой пользователь может настроить и запустить любое задание анонимно. В этом разделе описывается настройка безопасности с помощью пользовательской базы данных Jenkins для настройки проверки подлинности и авторизации.

Параметры безопасности можно найти, выбрав Jenkins Manage Jenkins >> Configure Global Security, как показано на снимке экрана:

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

На странице "Настройка глобальной безопасности" проверка поле "Включить безопасность проверка" и появится форма контроль доступа, аналогичная следующему снимку экрана:

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

Переключите переключатель для собственной пользовательской базы данных Jenkins в разделе области безопасности и убедитесь, что пользователи также проверка регистрации, как показано на следующем снимке экрана:

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

Наконец, перезапустите Jenkins и создайте новую учетную запись. Первая созданная учетная запись является корневой учетной записью, и эта учетная запись будет автоматически повышена до администратора. Вернитесь на страницу "Настройка глобальной безопасности" и проверка с помощью переключателя безопасности на основе матрицы. Корневая учетная запись должна быть предоставлена полный доступ, а анонимная учетная запись должна быть предоставлена только для чтения, как показано на следующем снимке экрана:

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

После сохранения этих параметров и перезапуска Jenkins будет включена безопасность.

Отключение безопасности

В случае забытого пароля или блокировки Jenkins можно отключить безопасность, выполнив следующие действия:

  1. Остановить Дженкинс. Если вы используете Jenkins.app, это можно сделать, щелкнув правой кнопкой мыши значок Jenkins.App в док-станции и выбрав "Выйти из меню", которое появится:

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

  2. Откройте файл ~/.jenkins/config.xml в текстовом редакторе.

  3. Измените значение <usesecurity></usesecurity> элемента на truefalse.

  4. <authorizationstrategy></authorizationstrategy><securityrealm></securityrealm> Удалите элементы из файла.

  5. Перезапустите Jenkins.

Настройка задания

На верхнем уровне Дженкинс упорядочивает все различные задачи, необходимые для сборки программного обеспечения в задание. Задание также содержит метаданные, связанные с ним, предоставляя сведения о сборке, например о том, как получить исходный код, как часто должна выполняться сборка, какие-либо специальные переменные, необходимые для сборки, и как уведомлять разработчиков о сбое сборки.

Задания создаются путем выбора Jenkins > New Job в меню в правом верхнем углу, как показано на следующем снимке экрана:

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

Откроется страница "Новое задание" (Jenkins). Введите имя задания и нажмите кнопку "Создать бесплатный проект программного обеспечения". На следующем снимка экрана показан пример:

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

При нажатии кнопки "ОК" отображается страница конфигурации для задания. Это должно выглядеть на следующем снимок экрана:

This should resemble this screenshot

Jenkins упорядочивает задания в каталоге на жестком диске, расположенном по следующему пути: ~/.jenkins/jobs/[JOB NAME]

Эта папка содержит все файлы и артефакты, относящиеся к заданию, например журналам, файлам конфигурации и исходному коду, который необходимо скомпилировать.

После создания начального задания его необходимо настроить с помощью одного или нескольких следующих элементов:

  • Необходимо указать систему управления исходным кодом.
  • В проект необходимо добавить одно или несколько действий сборки. Это шаги или задачи, необходимые для сборки приложения.
  • Задание должно быть назначено одному триггеру сборки — набору инструкций, сообщающих Jenkins, как часто извлекать код и создавать окончательный проект.

Настройка элемента управления исходным кодом

Первая задача Jenkins — получить исходный код из системы управления исходным кодом. Jenkins поддерживает многие популярные системы управления исходным кодом, доступные сегодня. В этом разделе рассматриваются две популярные системы, Git и Team Foundation Server. Каждая из этих систем управления исходным кодом подробно рассматривается в разделах ниже.

Использование Git для управления исходным кодом

Если вы используете TFS для управления исходным кодом, пропустите этот раздел и перейдите к следующему разделу с помощью TFS.

Jenkins поддерживает Git из коробки — дополнительные подключаемые модули не требуются. Чтобы использовать Git, нажмите переключатель Git и введите URL-адрес репозитория Git , как показано на следующем снимке экрана:

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

После сохранения изменений конфигурация Git завершится.

Использование TFS для управления исходным кодом

Этот раздел относится только к пользователям TFS.

Нажмите переключатель Team Foundation Server и появится раздел конфигурации TFS, аналогичный следующему снимку экрана:

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

Укажите необходимые сведения для TFS. На следующем снимка экрана показан пример завершенной формы:

This screenshot shows an example of the completed form

Тестирование конфигурации элемента управления исходным кодом

После настройки соответствующего элемента управления исходным кодом нажмите кнопку "Сохранить ", чтобы сохранить изменения. Это вернется на домашнюю страницу задания, которая будет выглядеть следующим образом:

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

Самый простой способ проверить правильность настройки элемента управления исходным кодом заключается в том, чтобы активировать сборку вручную, несмотря на отсутствие указанных действий сборки. Чтобы запустить сборку вручную, домашняя страница задания содержит ссылку Build Now в меню слева, как показано на снимке экрана ниже:

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

При запуске сборки в диалоговом окне "Журнал сборки" отображается мигающий синий круг, индикатор выполнения, номер сборки и время начала сборки, аналогичное следующему снимку экрана:

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

Если задание выполнено успешно, отобразится синий круг. Если задание завершается сбоем, отобразится красный круг.

Чтобы помочь в устранении неполадок, которые могут возникнуть в процессе сборки, Jenkins зафиксирует все выходные данные консоли для задания. Чтобы просмотреть выходные данные консоли, щелкните задание в журнале сборки, а затем щелкните ссылку "Вывод консоли" в меню слева. На следующем снимка экрана показана ссылка вывода консоли , а также некоторые выходные данные из успешного задания:

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

Расположение артефактов сборки

Jenkins извлекает весь исходный код в специальную папку, называемую рабочей областью. Этот каталог можно найти в папке в следующем расположении:

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

Путь к рабочей области будет храниться в переменной среды с именем $WORKSPACE.

Можно просмотреть папку рабочей области в Jenkins, перейдя на целевую страницу для задания, а затем щелкнув ссылку "Рабочая область " в меню слева. На следующем снимке экрана показан пример рабочей области для задания HelloWorld:

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

Триггеры сборки

Существует несколько различных стратегий для инициации сборок в Jenkins. Они называются триггерами сборки. Триггер сборки помогает Jenkins решить, когда начать задание и создать проект. Два наиболее распространенных триггера сборки:

  • Периодические сборки — этот триггер приводит к тому, что Jenkins запускает задание с заданными интервалами, например каждые два часа или в полночь в выходные дни. Сборка начнется независимо от того, были ли изменения в репозитории исходного кода.
  • Опрос SCM — этот триггер регулярно опрашит управление исходным кодом. Если какие-либо изменения были зафиксированы в репозитории исходного кода, Jenkins запустит новую сборку.

Опрос SCM является популярным триггером, так как он предоставляет быстрый отзыв, когда разработчик фиксирует изменения, которые вызывают разрыв сборки. Это полезно для оповещений команд, которые некоторые недавно зафиксированные коды вызывают проблемы, и позволяет разработчикам решить проблему, пока изменения по-прежнему свежи.

Периодические сборки часто используются для создания версии приложения, которую можно распространить на тестировщиков. Например, периодическая сборка может быть запланирована на пятницу вечером, чтобы члены команды QA могли протестировать работу предыдущей недели.

Компиляция приложений Xamarin.iOS

Проекты Xamarin.iOS можно скомпилировать в командной строке с помощью xbuild или msbuild. Команда оболочки будет выполняться в контексте учетной записи пользователя, работающей под управлением Jenkins. Важно, чтобы учетная запись пользователя получила доступ к профилю подготовки, чтобы приложение было правильно упаковано для распространения. Эту команду оболочки можно добавить на страницу конфигурации задания.

Прокрутите вниз до раздела "Сборка". Нажмите кнопку "Добавить шаг сборки" и выберите "Выполнить оболочку", как показано на следующем снимок экрана:

Click the Add build step button and select Execute shell

Следующая командная строка, чтобы указать сборку выпуска решения SOLUTION_FILE.sln для i Телефон. Расположение IPA можно задать, указав IpaPackageDir свойство в командной строке:

  • На компьютере Mac с помощью xbuild:

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

Команда xbuild обычно находится в каталоге /Library/Frameworks/Mono.framework/Commands.

  • В Windows с помощью 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
    

msbuild не будет автоматически развертывать $( ) выражения, передаваемые в командной строке. По этой причине рекомендуется использовать полный путь при настройке IpaPackageDir в командной строке.

Дополнительные сведения о свойстве см. в заметках о IpaPackageDir выпуске для iOS 9.8.

Создание проекта Xamarin.Android

Создание проекта Xamarin.Android очень похоже на создание проекта Xamarin.iOS. Чтобы создать APK из проекта Xamarin.Android, Jenkins необходимо настроить для выполнения следующих двух действий:

  • Компиляция проекта с помощью подключаемого модуля MSBuild
  • Подписывание и zip выравнивание APK с допустимым хранилищем ключей выпуска.

Эти два шага будут подробно описаны в следующих двух разделах.

Создание APK

Нажмите кнопку "Добавить шаг сборки" и выберите "Создать проект или решение Visual Studio с помощью MSBuild", как показано на снимке экрана ниже:

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

После добавления шага сборки в проект заполните отображаемые поля формы. На следующем снимок экрана показан один из примеров завершенной формы:

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

Этот шаг сборки будет выполняться xbuild в папке $WORKSPACE . Файл сборки MSBuild имеет значение Xamarin.Android.csproj-файл . Аргументы командной строки указывают сборку выпуска целевого пакета PackageForAndroid. Продукт этого шага будет APK, который находится в следующем расположении:

$WORKSPACE/[PROJECT NAME]/bin/Release

На следующем снимка экрана показан пример этого APK:

This screenshot shows an example of this APK

Этот APK не готов к развертыванию, так как он не подписан с закрытым хранилищем ключей и должен быть выровнен.

Подписывание и zipaligning APK для выпуска

Подписывание и zipaligning APK — это технически две отдельные задачи, выполняемые двумя отдельными инструментами командной строки из пакета SDK для Android. Однако их удобно выполнять в одном действии сборки. Дополнительные сведения о подписи и zipaligning APK см. в документации Xamarin по подготовке приложения Android для выпуска.

Обе эти команды требуют параметров командной строки, которые могут отличаться от проекта к проекту. Кроме того, некоторые из этих параметров командной строки — это пароли, которые не должны отображаться в выходных данных консоли при выполнении сборки. Мы будем хранить некоторые из этих параметров командной строки в переменных среды. Переменные среды, необходимые для подписывания и /или zip-выравнивания, описаны в таблице ниже.

Переменная среды Description
KEYSTORE_FILE Это путь к хранилищу ключей для подписывания APK
KEYSTORE_ALIAS Ключ в хранилище ключей, который будет использоваться для подписи APK.
INPUT_APK Пакет APK, созданный с помощью xbuild.
SIGNED_APK Подписанный APK, созданный jarsigner.
FINAL_APK Это zip-файл, выровненный ПО APK, который производится zipalign.
STORE_PASS Это пароль, используемый для доступа к содержимому хранилища ключей для пения файла.

Как описано в разделе "Требования", эти переменные среды можно задать во время сборки с помощью подключаемого модуля EnvInject. Задание должно добавить новый шаг сборки на основе переменных среды внедрения, как показано на следующем снимке экрана:

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

В поле формы "Свойства содержимого " , которое появится, переменные среды добавляются по одной строке в следующем формате:

ENVIRONMENT_VARIABLE_NAME = value

На следующем снимку экрана показаны переменные среды, необходимые для подписи APK:

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

Обратите внимание, что некоторые переменные среды для APK-файлов основаны на переменной WORKSPACE среды.

Последняя переменная среды — это пароль для доступа к содержимому хранилища ключей: STORE_PASS Пароли — это конфиденциальные значения, которые следует скрыть или опустить в файлах журнала. Подключаемый модуль EnvInject можно настроить для защиты этих значений, чтобы они не отображались в журналах.

Непосредственно перед разделом сборки конфигурации задания является раздел "Среда сборки". При переключе проверка поля формы при вводе паролей, проверка box, отображаются некоторые поля формы. Эти поля формы используются для записи имени и значения переменной среды. На следующем снимка экрана показан пример добавления переменной STORE_PASS среды:

This screenshot is an example of adding the STOREPASS environment variable

После инициализации переменных среды следующим шагом является добавление шага сборки для подписывания и выравнивания ZIP-файла APK. Сразу после шага сборки, чтобы вставить переменные среды, будет выполняться другая команда execute shell , которая будет выполняться jarsigner и zipalign. Каждая команда займет одну строку, как показано в следующем фрагменте кода:

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

На следующем снимках экрана показан пример ввода jarsigner команд и zipalign команд на шаг:

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

После выполнения всех действий сборки рекомендуется активировать сборку вручную, чтобы убедиться, что все работает. Если сборка завершается ошибкой, выходные данные консоли должны быть проверены для получения сведений о том, что привело к сбою сборки.

Отправка тестов в тестовое облако

Автоматические тесты можно отправить в Test Cloud с помощью команд оболочки. Дополнительные сведения о настройке тестового запуска в Xamarin Test Cloud см. в статье "Подготовка приложений Xamarin.Android" и подготовка приложений Xamarin.iOS.

Итоги

В этом руководстве мы представили Jenkins в качестве сервера сборки на macOS и настроили его для компиляции и подготовки мобильных приложений Xamarin для выпуска. Мы установили Jenkins на компьютере macOS вместе с несколькими подключаемыми модулями для поддержки процесса сборки. Мы создали и настроили задание, которое будет извлекать код из TFS или Git, а затем компилировать этот код в готовое приложение. Мы также изучили два разных способа планирования выполнения заданий.