В помощь мобильному разработчику
VSTS и HockeyApp

Непрерывная поставка/интеграция для Xamarin приложений при помощи VSTS и HockeyApp — Часть 1

Александр Алексеев

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

 «Непрерывная поставка это иесть новый Agile»

Это цитата изречение с Twitter за авторством Сандера Хугендорна и из неё следует, что он в какой-то степени прав. Постоянная интеграция (CI) и непрерывная поставка (DI) быстро становятся все более и более популярными, и наряду с этим появляется много инструментов, помогающих выполнять с ними работу. И правильно, поскольку эти вещи невероятно полезны и удобны!

Но как они работают с приложениями Xamarin? Какие инструменты доступны и как я могу установить собственную конвейерную обработку? И во сколько это обходится индивидуальному девелоперу? Я отвечу на все эти вопросы и объясню, как использовать данные вещи в своей работе! И да, они могут быть доступны бесплатно!

 

О чём эта статья?

Есть несколько способов для того, чтобы подготовиться к работе с ними. Как разработчик Microsoft я исхожу из того, что вы уже умеете использовать Visual Studio Team Services (VSTS ранее также известные как Visual Studio Online). После того как Microsoft приобрела HockeyApp и Xamarin, у них теперь появились все инструменты, необходимые для того, чтобы предоставить полнофункциональную конвейерную обработку CI/DI. В конечном счете она выглядит примерно следующим образом.

devops

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

Если это удастся, вы можете провести над ним несколько автономных тестовых запусков и отправить приложение в Test Cloud, чтобы оно было протестировано на физических устройствах. Если до этого момента всё по-прежнему идёт хорошо, тогда его можно либо отправить непосредственно в магазин, либо — на предварительное дистрибутирование в HockeyApp, и, таким образом, оно попадёт прямо в руки к (бета) тестерам.

В этой статье я расскажу о том, как настроить VSTS таким образом, чтобы сборка запускалась автоматически и затем отправлялась в HockeyApp. В качестве бонуса я поделюсь с Вами тем, как настроить Ваш резервный Mac в качестве агента сборки, который вам понадобится, если вы хотите разрабатывать и развертывать iOS-приложения.

В других статьях я позже расскажу о том, как сделать это с помощью Bitrise.io, который не требует того, чтобы Вы предоставляли собственный Mac. И может быть, даже AppVeyor. Я, вероятно, буду о нём упоминать, чтобы пояснить Вам некоторые различия между ними.

А вот чего я не стану здесь касаться — это вопросов запуска любого рода тестов. Просто потому, что это слишком большая тема для того, чтобы её можно было освещать поверхностно, так что мы подробно рассмотрим её в будущем.

 

Первое; регистрация

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

Давайте войдём в наш аккаунт на visualstudio.com, а затем заглянем в проект, который Вы хотите прокачать (в моем случае это — Boodschappie, приложение для менеджмента бакалейной торговли, разработкой которого я занимаюсь прямо сейчас) и нажмём на зеленую кнопку «плюс», расположенную на левой стороне.

screenshot-2016-05-31-10-55-43

Как и следовало ожидать от продукта Microsoft, здесь Вы увидите экран, где можно будет выбрать один из нескольких шаблонов, в которых за Вас уже проделана большая часть работы. Но если этого хочется, то можно и просто начать с чистого листа. Вы, наверное, уже заметили, что здесь есть Xamarin.Android и Xamarin.iOS, и нет Xamarin.UWP и Xamarin.Forms.

И это вполне оправданно. Вы ведь помните, что Xamarin.Forms являются дополнением к обычным приложениям Xamarin.iOS, Xamarin.Android и Xamarin.UWP. Так что когда дело доходит до создания и дистрибуции Ваших приложений, они по-прежнему являются отдельными. Давайте для начала сосредоточимся на iOS-приложении, выбрав Xamarin.iOS и нажав на кнопку Next.

Уже сейчас мы достигли последнего пункта, где создаются конфигурации билда! Это было совсем нетрудно! Здесь можно выбрать, какой источник использовать. Вам, вероятно, лучше придерживаться первого варианта, но, как Вы можете видеть, можно также использовать GitHub или даже некоторые другие хранилища источников. Кроме того, Вы можете указать, какие репозитории и отдельные ветки проекта должны использоваться.

screenshot-2016-05-31-11-37-19

Тут также есть флажок для «непрерывной интеграции», и это означает, что определенная сборка будет срабатывать каждый раз, когда Вы будете посылать код на хранение.

И ещё кое-что: Вы можете настроить очерёдность агента по умолчанию. Агента?..

Сейчас просто нажмите на кнопку Create и читайте об агентах сборки ниже.

 

Агенты сборки

Агент сборки требуется для сервера, который ждёт сигнала от Вашего TFS-сервера до тех пор, пока его услуги не понадобятся. Сервисы агента сборки должны компоновать Ваш код! Для локального TFS-сервиса, как правило, несложным делом бывает произвести установку агента непосредственно на сервере TFS и скомпоновать его там же. Для более крупных корпораций может быть необходимо иметь несколько агентов сборки, чтобы в случае если один из них занят, другой мог взять его работу на себя.

Теперь, когда Microsoft поддерживает множество разных платформ, появился новый вариант использования различных агентов сборки. Агент сборки на Windows не имеет возможностей для создания iOS-проектов. Просто потому, что компания Apple держит iOS SKDs закрытыми и позволяет им работать только на аппаратном обеспечении Mac с XCode.

Таким образом, Вам потребуется отдельный агент сборки для разработки iOS-проектов. Далее я объясню, как это сделать — сейчас довольно просто, но понадобится запасной Mac!

Если же у Вас его нет, то альтернативой может быть MacInCloud. Проще говоря, они как бы арендуют Вам Mac, который можно использовать для Вашей сборки. Для того чтобы получить агента сборки, который будет соответствовать Вашим требованиям, приходится отдавать от одного доллара за час пользования и до порядка 30 долларов в ежемесячном тарифе. У меня нет какого-либо практического опыта при такой работе, так что я ничего не могу сказать о скоростях, но если это можно сравнивать, то мой локальный агент сборки на Mac, работающий с VSTS, оказался потрясающе быстрым!

Если у вас есть опыт работы с MacInCloud, пожалуйста, поделитесь им!

 

Настройка определения сборки

Итак, мы создали определение сборки. Если вы в неё загляните, то обнаружите, что там уже имеются некоторые «шаги», и судя по красным обозначениям они не очень-то «довольны».

screenshot-2016-06-03-13-30-21

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

[Обновлено: 23 августа 2016] — Я действительно попробовал оставить без активизации действия по лицензии Xamarin, и всё прошло отлично! Таким образом, Вы также можете оставить их без внимания, нет проблем!

В любом случае пока что укажите там Ваш Xamarin-аккаунт, и всё. Вам, наверное, будет не комфортно, ввести свой пароль в виде текста, поэтому давайте выясним, как там следует вести дела.

 

Переменные сборки

Перейдите на вкладку переменные (Variables) в верхней части экрана. Там уже есть некоторые значения. Нажмите на кнопку Add variable в нижней части списка, чтобы добавить новую переменную.

Назовите её соответствующим образом, в этом случае что-то вроде XamarinPassword должно подойти, и введите пароль в поле значение (Value). Теперь нажмите на маленький замок, который находится за полем Value. Поле Value должно превратиться в плошку для пароля. Теперь вы можете использовать эту переменную в вашем шаге сборки и вам не придется делить пароль с кем-либо ещё. Классно!

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

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

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

 

Завершение определения сборки

Так что давайте вернемся к вкладке Build и перейдем к шагам Activate и Deactivate. Сейчас вместо пароля вводим $(XamarinPassword). Класс!

Отлично, теперь переходим к вещам посложнее. Практический шаг сборки.

screenshot-2016-06-03-13-44-35

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

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

Наиболее важные здесь части, вероятно, Signing и Provisioning. Вы можете предоставить файл сертификата p12 и .mobileprovision, которые используются для подписания и обеспечения этой ipa. Это является специфичным для iOS. Для Android-проекта вы должны проделать определенные манипуляции с хранилищем ключей здесь.

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

И заключительный шаг — запуск тестового проекта с помощью Test Cloud.  Как было сказано ранее, я не собираюсь сейчас в это углубляться, но, заметьте, то, чтобы ваши тесты успешно завершились, является крайне важным.

Во-первых, потому что Test Cloud — просто классная вещь. И во-вторых, потому что таким образом Вы можете следить за качеством Вашего приложения. Если вы желаете применить это немедленно, тогда просто настройте всё так, как Вы умеете. Если Вы планируете заняться этим позже, тогда проще всего снять флаг и установить его туда вновь тогда, когда Вы будете готовы.

После этого всё готово к работе! Теперь нам просто нужен тот самый агент сборки.

 

Установка агента сборки Mac

Теперь, когда у нас есть определение сборки, нам следует подготовить к работе нашего агента.

У меня был шанс испытать это на обычном Mac mini, который попался под руку, его спецификации устарели на несколько лет, и в нём не было ничего особенного: он даже ещё не имел памяти SSD. Тем не менее производительность у него весьма неплохая! Ему не приходится делать очень тяжелую работу, поэтому определённых базовых аппаратных характеристику уже вполне достаточно.

Если Вы не планируете использовать его для чего-либо другого (я бы рекомендовал), просто сотрите с него всё и начисто установите последнюю версию операционной системы Mac OS. Кроме того, установите XCode и Xamarin. У меня не было какой-либо другой цели для использования Mac, кроме задач по разработке, так что я также настроил TeamViewer с автоматическим доступом, и поэтому мой Mac располагается сегодня где-то в шкафу с подключенным сетевым шнуром и кабелем для интернета, и всё.

И последнее, что нужно сделать, чтобы всё заработало — это установить агента сборки. Это можно легко сделать из VSTS на Вашем Mac. Зайдите в панели управления и нажмите на значок конфигурации (шестерня) в верхнем правом углу. Это может заработать не с первого раза.

Если щелкнуть на него из проекта, в котором Вы находитесь, тогда Вы обнаружите другую конфигурацию, нежели при нажатии на него в общей приборной панели VSTS. Так что если вы не видите вкладку Agent Pools, обратитесь к верхней левой части экрана и нажмите на имя пользователя. Путь должен быть следующим: Control Panel > Username , а не Control Panel > Username Project‘. Смотрите скриншот внизу.

Итак, перейдите на вкладку Agent Pools.

 

Agent Pools

screenshot-2016-06-03-14-14-38

Если Вы ещё не настраивали агента сборки до этого, тогда, вероятно, экран здесь будет пустым.

Hosted pool кажется весьма впечатляющим. Эта библиотека обеспечивается Microsoft с базовыми (общими) агентами сборки в Azure, которые помогают Вам решать основные задачи по разработке. Большинство Ваших .Net-проектов могут опираться на них прямо «из коробки».

Если у Вас есть особые требования, Вы можете настроить собственную библиотеку или даже библиотеки. Вы можете упорядочивать их как угодно. Группировать по возможностям, географическому расположению, цвету, в общем, как угодно! Но так как, вероятно, у Вас он будет только один, то он будет размещен в библиотеке по умолчанию.

Для настройки остальной части вашего агента сборки пройдите по этой ссылке от Рене ван Оснабрадж, который знает очень много об ALM, так что пусть он объяснит Вам это самым лучшим образом!

 

Очередизация Вашей первой сборки

После того как у Вас всё это получится и заработает, вернетесь к определению сборки и попробуйте поставить в очередь Вашу первую сборку!

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

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

Думаю на этом следует пока закончить, и рассказать обо всем остальном в следующий раз! Поделитесь с нами Вашими впечатлениями о том, как это всё работает у Вас, а я скоро вернусь, чтобы рассказать о том, как переслать эту сборку в HockeyApp!

Автор: Gerald Versluis
ИсточникСтатья в блоге автора

Александр Алексеев
Александр Алексеев

Xamarin - разработчик. Работаю с .NET платформой с 2012 года, программирую в основном с использованием C#. За это время успел поработать с ASP.NET, Entity Framework, MSSQL, Git

Написать ответ