Установка Jenkins і Bonobo Git Server під ОС Windows для складання Android додатків

Добрий день. Не маючи часу копатися в LinuxЗіткнувшись з пробілами інформації при пошуку по мережі інструкцій по установці і настройці під ОС Windows сервера безперервної складання Jenkins для додатків Android, Git сервера та їх інтеграції вирішив поділитися інформацією про те, що у мене вийшло.

Дистрибутиви

Останні приготування

Можете з самого початку встановити JDK, Git for Windows і Android SDK Tools з налаштуваннями по дефолту.

Bonobo Git Server

Простий і легкий git сервер під собою вимагає установки IIS і ASP.MVC що включає MS SQL Server Express 2008

IIS Server
Тут нічого незвичайного, додаємо роль Web Server (IIS):

IISimage

Головне на наступному формі не пропустити додати ASP.NET 4.5 Feature:

Featureimage

ASP.NET MVC4
Запускаємо дистрибутив:

ASP.NET MVC4 Installimage

Попутно встановиться MS SQL Server 2008 Express і нас запитають пароль для УЗ sa. Сподіваюся без потреби вона більше не буде потрібно:

MS SQL Server installationimage

Після установки MVC потрібно за новою пройтися в налаштування серверних ролей (не features, а раніше) і додати web-сервера підтримку ASP.NET4.5. До установки ASP.NET MVC 4 цього підрозділу (Application Development) в компонентах IIS не було!

Server Roles — IIS — Web Server Application Development — ASP.NET 4.5image
Bonobo Git Server
Все, тепер можна перейти безпосередньо до розгортання git сервера. Разархивируем вміст дистрибутива в wwwroot IIS-сервера і даємо права УЗ IIS_IUSERS на модифікацію каталогу App_Data:

IIS wwwroot і права УЗ IIS_IUSERS на каталог App_Dataimage

Запускаємо IIS Manager і конвертуємо в додаток BonoboGitServer:

IIS Manager Convert to Applicationimage

Якщо все пішло так, як треба праворуч в IIS Manager в Action тиснемо Browse: *:80(http) і потрапляємо (якщо ви не змінили ім'я і порт) на localhost/BonoboGitServer:

Bonobo Git Server login pageimage

Логін і пароль для першого входу admin/admin. Сервер не так багато налаштувань (у всякому разі через web-інтерфейс), можна, наприклад, поміняти мову інтерфейсу:

Bonobo Languageimage

і створити нових користувачів, наприклад developer і jenkins. Під першим ми будемо працювати самі, другий потрібен майбутнього сервера збірок.

Новий користувач Bonobo Git Serverimage

Створимо новий репозиторій і дамо права на нього розробнику і збирачу (УЗ jenkins, на скріні немає, але він там повинен бути якщо робити все по порядку...)

Новий репозиторійimage

Приклад сторінки репозиторію з заповітним адресою .git. Т. к. я заходив на сервер з браузера на цій же машині в адресі у мене фігурує localhost, але у вас може бути нормальне DNS-ім'я сервера або IP.

Адреса репозиторіюimage

Можна створити якийсь проект в Android Studio вказати в якості віддаленої гілки адресу нашого репозиторію. Всю цю локальну частина я пропущу.

Віддалений репозиторій доступнийimage

Jenkins

Jenkins встановлюється з msi і особливо ні про що не запитує, в кінці установки автоматично відкривається сторінка з адресою де нам потрібно скопіювати з файлу initialAdminPassword і вставити пароль:

Unlock Jenkinsimage

Надалі пароль УЗ admin теж можна змінити.

Прийшла пора встановити необхідні плагіни і налаштувати сервер. Переходимо в Manage Jenkins — Manage Plugins — Avaliable і відзначаємо:

  • JDK Parameter Plugin
  • Git plugin
  • Android Emulator Plugin
  • Gradle plugin
Jenkins pluginsimage

Після перезапуску Jenkins необхідно перейти в розділ Manage Jenkins — Configure System і прописати шлях до Android SDK в двох місцях:

ANDROID_HOME в Environment variablesimage

І в самому низу цієї сторінки в Android SDK root:

Android SDK rootimage

Якщо цей параметр не з'явилося щось не то з Android Emulator Plugin, можливо він просто не встановився.

Далі перейти на сторінку конфігурації Manage Jenkins — Global Configuration Tool перевірити і при необхідності вказати шляхи до компонентів:

Global Configuration ToolЗ JDK всі прсто:

image
Git можна не чіпати, якщо у змінній path шлях до виконуваного файлу git і він доступний в командному рядку то і Jenkins зможе його використовувати:

image

А Gradle нехай завантажується автоматично. В принципі такий же фокус можна було б зробити з JDK але при установці Android SDK вимагає зареєстрованої в системі JDK, а куди Jenkins викачує JDK я не розкопав.

image

Здається все?

Створення завдання на автоматичну збірку

В основному бічному меню Jenkins тиснемо New Item, придумуємо назву завдання з типом «Freestyle project» і тиснемо ок, потрапляємо в конфігурацію завдання. Не забуваємо поставити галочку Discard old builds а то наш сервер незабаром заповниться успішними билдами всіх версій:

Generalimage

У розділі Source Code Management вказуємо URL репозиторію git нашого проекту. Забігаючи вперед, не заводимо і не підставляємо ніякі облікові дані для доступу до сховища:

Source Code Managementimage

Будемо збирати гілку master. Також можна налаштувати автоматичну збірку, зокрема опитування репозиторію щохвилини і старт збірки у разі виявлення нових комітів. Відзначаємо Poll SCM і пишемо * * * * *:

Build triggersimage

У розділі build натискаємо Add build step і налаштовуємо збірку Gradle. Gradle version повинен бути доступний той, що ми вказали в Global Tools Configurations. Пишемо простий Task — «clean build». Це завдання, доступні нам у gradlew.bat tasks в корені проекту. Ви можете викликати тут і інші завдання складальника, в т. ч. з ключами.

Gradleimage

Також додаємо одне Post-build Action — будемо зберігати наші APK-шники — додатки Android. Так і пишемо:

**\*apk:

Post-build Actionimage

Збірка

Зберігаємо і запусків збірку і бачимо щось подібне, висимо 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 схоже що теж не трапиться. Тобто це не допоможе:

Credential Managerimage

Додатковий пошук по мережі дав кілька порад:

  • Перенесення ssh-ключів з УЗ сеансу в system, які я так і не зміг знайти;
  • Другий спосіб (Авторизація git), який спрацював.
Авторизація git
Для цього нам буде потрібно PsExec.exe з набору утиліт PsTools. З її допомогою ми можемо запустити cmd.exe з під System. Запускаємо cmd.exe з підвищеними правами і виконуємо:

PsExec.exe -i -s cmd.exe

У новій консолі все що потрібно зробити це постукають в потрібний нам репозиторій, наприклад спробувати в командному рядку скопіювати його. будуть запитані облікові дані:

Gitimage

За допомогою яких 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 Platform SDK 24, Android SDK Build-Tools 24.0.1].

У такому випадку вам треба запустити з підвищеними правами SDK Manager і встановити необхідні компоненти:

Android SDK Managerimage

Все, після всіх шаманств збірка пройшла успішно!

Successful build!image

Можете розводити команду Android-розробників.

p.s. Можна ще більше автоматизувати процес, з допомогою цього плагіна налаштувати автоматичекую публікацію apk'шника в Google Play Store, але про це я напишу може бути в інший раз, якщо там будуть якісь труднощі.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.