Добрый день. Не имея времени копаться в LinuxСтолкнувшись с пробелами в информации при поиске по сети инструкций по установке и настройке под ОС Windows сервера непрерывной сборки Jenkins для приложений Android, Git сервера и их интеграции решил поделиться информацией о том, что у меня получилось.
Дистрибутивы
- В роли ОС у нас будет выступать Windows Server 2012 R2 Standard x64
- Jenkins для Windows есть в отдельном msi
- Bonobo Git Server
- JDK
- ASP.NET MVC 4
- Android SDK tools в самом низу странички, не среду а только SDK
- Git for Windows x64
Последние приготовления
Можете с самого начала установить JDK, Git for Windows и Android SDK Tools с настройками по дефолту.
Bonobo Git Server
Простой и лёгкий git сервер под собой требует установки IIS и ASP.MVC что включает MS SQL Server Express 2008
IIS Server
Тут ничего необычного, добавляем роль Web Server (IIS):
Главное на следущей форме не пропустить добавить ASP.NET 4.5 в Feature:
ASP.NET MVC4
Запускаем дистрибутив:
Попутно установится MS SQL Server 2008 Express и нас спросят пароль для УЗ sa. Надеюсь без надобности она более не потребуется:
После установки MVC нужно по новой пройтись в настройки серверных ролей (не features, а раньше) и добавить web-серверу поддержку ASP.NET4.5. До установки ASP.NET MVC 4 этого подраздела (Application Development) в компонентах IIS не было!
Bonobo Git Server
Всё, теперь можно перейти к непосредственно развёртыванию git сервера. Разархивируем содержимое дистрибутива в wwwroot IIS-сервера и даём права УЗ IIS_IUSERS на модификацию каталога App_Data:
Запускаем IIS Manager и конвертируем в приложение BonoboGitServer:
Если всё пошло так как надо справа в IIS Manager в Action жмём Browse: *:80(http) и попадаем (если вы не изменили имя и порт) на localhost/BonoboGitServer:
Логин и пароль для первого входа admin/admin. У сервера не так много настроек (во всяком случае через web-интерфейс), можно например поменять язык интерфейса:
и создать новых пользователей, например developer и jenkins. Под первым мы будем работать сами, второй нужен будущему серверу сборок.
Создадим новый репозиторий и дадим права на него разработчику и сборщику (УЗ jenkins, на скрине нет, но он там должен быть если делать всё по порядку...)
Пример странички репозитория с заветным адресом .git. Т.к. я заходил на сервер из браузера на этой же машине в адресе у меня фигурирует localhost, но у вас может быть нормальное DNS-имя сервера или IP.
Можно создать какой-нибудь проект в Android Studio указать в качестве удалённой ветки адрес нашего репозитория. Всю эту локальную часть я пропущу.
Jenkins
Jenkins устанавливается из msi и особо ни о чём не спрашивает, в конце установки автоматически открывается страничка с адресом где нам нужно скопировать из файла initialAdminPassword и вставить пароль:
В дальнейшем пароль УЗ admin тоже можно поменять.
Пришла пора установить необходимые плагины и настроить сервер. Переходим в Manage Jenkins — Manage Plugins — Avaliable и отмечаем:
- JDK Parameter Plugin
- Git plugin
- Android Emulator Plugin
- Gradle plugin
После перезапуска Jenkins необходимо перейти в раздел Manage Jenkins — Configure System и прописать путь к Android SDK в двух местах:
И в самом низу этой же странички в Android SDK root:
Если данного параметра не появилось что-то не то с Android Emulator Plugin, возможно он просто не установился.
Далее перейти на страничку конфигурации Manage Jenkins — Global Tool Configuration проверить и при необходимости указать пути к компонентам:
Git можно не трогать, если в переменной path указан путь к исполняемому файлу git и он доступен в командной строке то и Jenkins сможет его использовать:
А Gradle пусть скачается автоматически. В принципе такой же фокус можно было бы сделать с JDK но при установке Android SDK требует зарегистрированной в системе JDK, а куда Jenkins скачивает JDK я не раскопал.
Кажется всё?
Создание задачи на автоматическую сборку
В основном боковом меню Jenkins жмём New Item, придумываем название задачи с типом «Freestyle project» и жмём ок, попадаем в конфигурацию задачи. Не забываем поставить галочку Discard old builds а то наш сервер вскоре заполнится успешными билдами всех версий:
В разделе Source Code Management указываем URL репозитория git нашего проекта. Забегая вперёд, не заводим и не подставляем никакие учётные данные для доступа к репозиторию:
Будем собирать ветку master. Также можно настроить автоматическую сборку, в частности опрос репозитория ежеминутно и старт сборки в случае обнаружения новых коммитов. Отмечаем Poll SCM и пишем * * * * *:
В разделе build нажимаем Add build step и настраиваем сборку Gradle. Gradle version должен быть доступен тот, что мы указали в Global Tools Configurations. Пишем простой Task — «clean build». Это задачи, доступные нам в gradlew.bat tasks в корне проекта. Вы можете вызывать тут и другие задачи сборщика, в т.ч. с ключами.
Также добавляем одно Post-build Action — будем сохранять наши APK-шники — приложения Android. Так и пишем:
***apk:
Сборка
Сохраняем и запускам сборку и видим что-то подобное, висим 10 минут и не можем достучатся в репозиторий:
git.exe fetch --tags --progress http://localhost/Hello.git +refs/heads/*:refs/remotes/origin/*
Мы же никак не авторизовались в репозитории git! Добавление пары Login/Password в хранилище Jenkins (там где мы оставили -none- в Source Code Management) не сработало, как бы я не пробовал. Надо попробовать поискать другие пути.
Командная строка запускается от имени УЗ сеанса, Jenkins от имени System и ничего об этом не знает, в хранилище Credential Manager похоже что тоже не случится. Т.е. это не поможет:
Дополнительный поиск по сети дал несколько советов:
- Перенос ssh-ключей из УЗ сеанса в system, которые я так и не смог найти;
- Второй способ (Авторизация git), который сработал.
Авторизация git
Для этого нам потребуется PsExec.exe из набора утилит PsTools. С её помощью мы можем запустить cmd.exe из под System. Запускаем cmd.exe с повышенными правами и выполняем:
PsExec.exe -i -s cmd.exe
В новой консоли всё что нужно сделать это постучатся в нужный нам репозиторий, например попробовать в командной строке склонировать его. будут запрошены учётные данные:
С помощью которых Jenkins сможет обращаться к данному репозиторию. Это та самая УЗ, которую мы создавали при настройках Bonobo Git Server наряду с developer'ом. Если в дальнейшем потребуется изменить данные учётные данные придётся пройти процедуру повторно.
Нехватка компонентов и акцептов лицензий на компоненты Android SDK
Может случится так что в SDK будут отсутствовать какие-нибудь модули и консоль сборки выдавать сообщения подобного характера:
A problem occurred configuring project ':app'. You have not accepted the license agreements of the following SDK components: [Android SDK Platform 24, Android SDK Build-Tools 24.0.1].
В таком случае вам надо запустить с повышенными правами SDK Manager и установить недостающие компоненты:
Всё, после всех шаманств сборка прошла успешно!
Можете разводить команду Android-разработчиков.
P.S. Можно ещё более автоматизировать процесс, с помощью соответсвующего плагина настроить автоматичекую публикацию apk'шника в Google Play Store но об этом я напишу может быть в другой раз, если там будут какие-нибудь трудности.
Автор: Arvalon