Налаштування TeamCity в Azure - постійно-доступна система для командної роботи в хмарі

Ця стаття продовжує цикл, розпочатий нашими друзями з Лабораторії Касперського і описує реальний досвід використання інструментів тестування від Microsoft (і не тільки) з рекомендаціями та висновками. Автор — інженер з тестування, Ігор Щегловітов (ins4n3 на хабре). Наші статті, присвячені тестування, позначені тегом #mstesting.
У даній статті я хотів би розповісти про свій перший досвід налаштування процесу Continuous Integration c допомогою популярної системи TeamCity, на віртуальній машині в Azure. Це добре тим, що у нас завжди буде доступна наша система з зручним доступом і контролем над ресурсами.



Будуть описані наступні дії:
  • конфігурування сервера TeamCity.
  • створення образу хмарного агента.
  • налаштування локального GIT.
  • створення веб-сайту в Azure.
  • налаштування білду
  • додавання і запуск хмарних агентів
  • перевірка роботи


Почнемо по порядку.

Конфігурування сервера TeamCity



TeamCity-сервер ми буде розгортати на новій віртуальній машині:

Створимо в Azure нову VM.



Відкриємо на ній 80 порт (він буде використовуватися сервером TeamCity).



Додамо через Azure консоль до нашої VM новий диск (він буде використовувати для зберігання даних TeamCity сервера).



Підключимося до створеної VM по RDP і завантажимо дистрибутив TeamCity



Відкриємо Disk Management та ініціалізуємо новий диск.

Встановимо TeamCity, в процесі вибравши тільки серверні компоненти.



Далі в якості TeamCity Data Directory вкажемо новий диск.



Встановимо порт сервера TeamCity (ми будемо використовувати 80й порт)



І виберемо користувача, з-під якого буде працювати сервіс TeamCity (я вказав System)



Після установки відкриємо http://localhost/mnt і запустимо процес автоматичної настройки сервера.
Після натискання кнопки Proceed виберемо тип БД TeamCity (в даному прикладі використовуємо Internal БД).



Далі почнеться ініціалізація БД, після якої слід створити адміністратора TeamCity сервера.



Відкриємо у FW порт 80.

Створення образу хмарного агента



Не так давно JetBrains анонсував плагін, який дозволяє автоматично створювати і запускати хмарні агенти TeamCity в Azure. Під час запуску агента, використовуючи даний плагін, створюється нова віртуальна машина. Ви ж у будь-який момент можете зупинити хмарний агент, що призведе до звільнення ресурсів і, відповідно, до економії коштів :) Ми будемо використовувати саме хмарні агенти. Хмарні агенти створюються на основі заздалегідь підготовленого образу віртуальної машини.

Отже:
Створюємо в Azure нову віртуальну машину. Ми будемо створювати для білд ASP.NET сайту, який буде створений в Visual Studio 2013, а для запуску тестів у нас буде використовувати MsTest. Хоча можна використовувати й інші інструменти. Це не принципово. На агент нам треба буде встановити Visual Studio (я поставив Community 2013. Якщо у вас безкоштовна передплата, у галереї віртуальних машин ви не знайдете образ з передвстановленою студією і тоді вам знадобиться поставити її вручну).





Також слід відкрити порт 9090. Це порт за замовчуванням, який слухає агент.



Підключимося по RDP до створеної VM. Завантажити і встановити Git for Windows. Під час установки треба відзначити галку Use Git from the Windows Command Prompt



Зазначимо порт сервера TeamCity



Задамо параметри агента:
serverUrl — адреса сервера TeamCity
workDirі
tempDir можна залишити за замовчуванням, але я для даних змінних зазвичай використовую спеціальний диск (Temporary Storage) VM.



Відкриємо порт 9090 для вхідних з'єднань або через FW або командою:
netsh advfirewall firewall add rule name=«TeamCityAgentIn» dir=in action=allow protocol=TCP localport=9090

Я помітив, що після створення хмарного агента (від моменту запуску VM) він просто зависає на етапі ініціалізації і не підключається до сервера TeamCity. Можливо, це баг в технічній реалізацією самого JetBrains плагіна, а може ще де проблема. Але, якщо підключити до агента по RDP і перезапустити сервіс агента вручну, то агент запрацює. Я вирішив автоматизувати даний процес. Ось приклад, як це можна зробити:
Відкрити оснащення Local Group Policy Editor (gpedit.msc)
Додати новий Startup powershell script

get-service «TeamCity Build Agent» | restart-service-PassThru



Далі треба зупинити VM через портал і на основі неї створити образ віртуальної машини:



Після цього видалити VM.

Налаштування локального GIT



Створимо новий репозиторій в GitHub.





І скопіювати посилання на нього:



Встановимо GIT на локальну машину (звідки будуть проводитися чекіна). Створимо нову папку, яка буде виступати в якості локальної копії сховища коду. Після цього зв'яжемо локальну папку з GitHub — використовуючи командний рядок, заходимо в створену папку і виконуємо команду git clone {gitRepositoryUrl}.



Якщо ви працюєте з корпоративної мережі, то clone команда може відвалитися з-за проблем з проксі. Налаштувати і обійти дану комунікаційну проблему я зміг лише за допомогою установки локального NTLM проксі сервера, який перенаправляв запити корпоративний проксі. Дистрибутив проксі сервера можна взяти тут.
Після успішної установки слід налаштувати проксі для Git, для цього треба виконати наступні команди:

git config --global http.proxy localhost:{cntlm-proxy-port}
git config --global https.proxy localhost:{cntlm-proxy-port}

Після клонування репозиторію в папці з проектом (GIT) слід створити нове рішення Visual Studio (ASP.NET Web Form Project + UnitTestProject)
Виконаємо Commit і Push змін прямо в студії.



Після цього в GitHub з'явиться ваш новий чекін.



Примітка: закоммитить зміни можна і з допомогою git команд у командному рядку
git add. (додати файли в Git репозиторій)
git commit-am «Test commit.» (комміт змін)
git push {git-url} (Пуш змін з локального сховища в GitHub)

Створення веб-сайту в Azure



Через Azure консоль створити новий порожній веб сайт



Після створення сайту натиснемо кнопку «Налаштувати розгортання в системі керування версіями» і зв'яжемо GitHub репозиторій з новим сайтом.
Відкриваємо налаштування сайту. На вкладці настройка нас цікавлять:
Urlадреса GIT
Url адреса для запуску розгортання



Якщо в першому URL замінити deploy на cifromgittestsite.git і передати отриману посилання в команду git push, то вийде команда запуску деплоя веб-сайту.

git.exe push-f адресу

Далі треба відключити автоматичне розгортання з GitHub. Якщо це не зробити, кожен чекін буде призводити до автоматичного деплою сайту. А наша мета реалізувати CI — виконувати деплой, тільки за умови успішного складання коду і прогону юніт тестів.

Налаштування білду



Відкриємо UI TeamCity (http://TeamCityServerDns) і створимо новий проект (Create Project).



Задамо ім'я проекту. Додамо нову конфігурацію білду (Create Build Configuration)



Вкажемо ім'я конфігурації



Налаштуємо VCS (version control system). Тут треба заповнити тип VCS (Git), назва, Fetch URL (Read only URL вашого репозиторію просто помітити посилання доступу до сховища протокол https або http git), вказати бранч (у мене створений тільки master), і вказати шлях до git.exe на агенті



Після конфігурування можна натиснути TestConnection і перевірити успішність підключення до дерева GitHub
Після успішної установки VCS в CheckOut Options треба вказати VCS checkout mode — Automatically on agent.
Виберемо Build Steps і додамо (Add build step) кроки нашого білду.



Перший крок — збірка нашого солюшина. Тут треба заповнити всі як на скріні:



Другий крок — запуск тестів:



Третій крок — деплой (команда деплоя була сформована в процесі налаштування сайту)



Повинно вийти щось подібне:



Створимо новий тригер. Тут відзначаємо галку Trigger a build on each check-in.

Додавання і запуск хмарних агентів



Підключимося по RDP до віртуальній машині з сервером TeamCity. Завантажити плагін для управління хмарними агентами.
Покласти плагін в папку F:\plugins (диск F — TeamCityDataDirectory) і перезапустити сервіс TeamCity Server.



Відкриємо TeamCity UI (меню Administrations => Plugins Lists).
У списку плагінів повинен з'явитися новий плагін Microsoft integrations



Далі створимо через Azure консоль новий порожній Cloud Service, який буде виступати в ролі сховища для зберігання инстансов агентів TeamCity.



Перейдемо в Administration => Global Settings і пропишемо правильний повний DNS TeamCity сервера:



Перейдемо до створення нового профілю хмарного агента Administration =>Agent Cloud=> Create new profile



Тут слід задати ім'я профілю, тип хмари — Azure, сертифікат управління і SubscriptionId від підписки Azure (ці дані можна завантажити за посиланням https://manage.windowsazure.com/publishsettings



Після заповнення основних налаштувань профілю натиснути Add images і вказати ім'я образу віртуальної машини хмарного агента, ім'я порожнього хмарного сервісу, максимальна кількість агентів, розмір агента, і префікс імені створюваних агентів



Примітка. Кількість инстансов агентів залежить від кількості відкритих в firewallпортів на хмарному образі віртуального агента.
Приклад:якщо для агента вказаний порт за замовчуванням, тобто 9090, то в тому випадку,якщо firewallви відкрили тільки порт 9090, ви зможете створити тільки одного агента, якщо ж у вашому образі у вас відкрито діапазон від 9090-9099, то ви зможете створювати 10 агентів.

Після збереження налаштувань TeamCity автоматично запустить нового хмарного агента.



Меню управління агентами Agents => Cloud Agent, можна управляти агентами.



Агент у процесі запуску автоматично створить віртуальну машину:



Перевірка роботи



Все створено і налагоджено. Тепер можна приступити до перевірки нашого білду.
Для цього в меню Projects можна натискаємо Run



Якщо подивитися логи білду, то буде видно, що код викачується з GitHub, билдится, далі запускаються юніт тести, і якщо все успішно, то починається деплой.
Ми створили білд тригер, т. о. якщо ми зачекинить нові зміни в GitHub,



то наш білд запуститися автоматом і через кілька хвилин — білд автоматом збереться, прожене тести і автоматично задеплоит сайт в Azure



Джерело: Хабрахабр

0 коментарів

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