Настройка TeamCity в Azure — постоянно-доступная система для командной работы в облаке

Эта статья продолжает цикл, начатый нашими друзьями из Лаборатории Касперского и описывает реальный опыт использования инструментов тестирования от Microsoft (и не только) с рекомендациями и выводами. Автор — инженер по тестированию, Игорь Щегловитов (ins4n3 на хабре). Наши статьи, посвященные тестированию, помечены тегом #mstesting.

В данной статье я хотел бы поделиться о своём первом опыте настройки процесса Continuous Integration c помощью популярной системы TeamCity, на виртуальной машине в Azure. Это хорошо тем, что у нас всегда будет доступна наша система с удобным доступом и контролем над ресурсами.bd8b769ef62942d6894fca620b024308.pngБудут описаны следующие действия:

конфигурирование сервера TeamCity. создание образа облачного агента. настройка локального GIT. создание веб сайта в Azure. настройка билда добавление и запуск облачных агентов проверка работы Начнем по порядку.

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

Создадим в Azure новую VM.

2tr1z1hhks6vgk9w6e66kbo

Откроем на ней 80 порт (он будет использоваться сервером TeamCity).

sxcstkf75ebk0p5ul2g5nm4

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

wbdfmo56k3_nyyx53pg063o8

Подключимся к созданной VM по RDP и загрузим дистрибутив TeamCity

1j16l9ypc88rny8bppnbhxbui

Откроем Disk Management и инициализируем новый диск.

Установим TeamCity, в процессе выбрав только серверные компоненты.

jddir8nz3jts7bgq22dm-fsw

Далее в качестве TeamCity Data Directory укажем новый диск.

xr4jpfd1lyrap2__79sbv_qj

Установим порт сервера TeamCity (мы будем использовать 80й порт)

125dmub_5l6uc796s6gruu_6f

И выберем пользователя, из-под которого будет работать сервис TeamCity (я указал System)

1q0xfptklc6aajj5d464h-xfj

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

gdvq746vke4kcku-09ojdznt

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

vq42xkv9bldsficc633vp6vd

Откроем в FW порт 80.

Создание образа облачного агента Не так давно JetBrains анонсировал плагин, который автоматически позволяет создавать и запускать облачные агенты TeamCity в Azure. Во время запуска агента, используя данный плагин, создается новая виртуальная машина. Вы же в любой момент времени можете остановить облачный агент, что приведет к освобождению ресурсов и, соответственно, к экономии средств :) Мы будем использовать именно облачные агенты. Облачные агенты создаются на основе заранее подготовленного образа виртуальной машины.

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

cwoqul_hegz-u7fwkidufa1v

5gw8nadfcmw556x4wx1mzu0t

Также следует открыть порт 9090. Это порт по умолчанию, который слушает агент.

2mnui104p8-5evtfoho67yuj

Подключимся по RDP к созданной VM. Скачать и установить Git for Windows. Во время установки надо отметить галку Use Git from the Windows Command Prompt

q65cq46ge0fb5x8tgqj_q8nh

Укажем порт сервера TeamCity

125dmub_5l6uc796s6gruu_6f

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

ys5n0aum37vf_bi2oppxjvy8

Откроем порт 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

32j5uy6tw1-wsyctt_-ns0dg

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

n702mujqba_tao3s7w1p1tk1

После этого удалить VM.

Настройка локального GIT Создадим новый репозиторий в GitHub.

iei5hod77uvlqjrgi3fp2a1o

clo_xzldpjjh5rl_rldpt353

И скопируем ссылку на него:

1o6zx7r3hlotpevc1_jp_7ug1

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

8bysscr-t37ouzou0d-xwm6r

Если вы работаете из корпоративной сети, то 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 изменений прямо в студии.

1scw3-kwjs3c0nv66zzcqo0p8

После этого в GitHub появится ваш новый чекин.

n9yrwbsbqi0zb19gb09hmgz6

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

Создание веб сайта в Azure Через Azure консоль создать новый пустой веб сайт

ylo22g_p0i1lic5j151r_xzy

После создания сайта нажмем ссылку «Настроить развертывание в системе управления версиями» и свяжем GitHub репозиторий с новым сайтом.Открываем настройки сайта. На вкладке настройка нас интересуют: Url адрес GITUrl адрес для запуска развертывания

1740110p215iojmo79_liztre

Если в первом URL заменить deploy на cifromgittestsite.git и передать полученную ссылку в команду git push, то получится команда запуска деплоя веб сайта.

git.exe push -f адрес

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

Настройка билда Откроем UI TeamCity (http://TeamCityServerDns) и создадим новый проект (Create Project).

13i2-ljnxvwg61nbngq3bqojw

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

e_5z4h-6d9r70o9s28a1gpml

Укажем имя конфигурации

1v954g3sa_lcyzrs-cvmi--es

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

gyoepred6th0hhkya9ulqcku

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

m9rxsw2v4hhhdhwc9-_35z37

Первый шаг — сборка нашего солюшина. Здесь надо заполнить все как на скрине:

t8fvi6wvrd2a-dqwpmv-j6z3

Второй шаг — запуск тестов:

1199hyvlbvo4z0xscosadz6i_

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

15933kqaes31r9c086fm8qk-x

Должно получиться что-то подобное:

17jwhh_wfdeuara-8at8jgkh8

Создадим новый триггер. Здесь отмечаем галку Trigger a build on each check-in.

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

ivxq_uxx19pliuzwoxzpcnv_

Откроем TeamCity UI (меню Administrations => Plugins Lists).В списке плагинов должен появиться новый плагин Azure integrations

-51m_c6qzbfyj9p1bx8uwymy

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

1a3hjtoz4cdxu_s3dpm11k_y9

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

1sd2hnozhipjn5cvng55idezo

Перейдем к созданию нового профиля облачного агента Administration =>Agent Cloud=> Create new profile

1syvasc2osvhq68h_7gudun2o

Здесь следует задать имя профиля, тип облака — Azure, сертификат управления и SubscriptionId от вашей подписки Azure (эти данные можно скачать по ссылке https://manage.windowsazure.com/publishsettings)

pspqk6zlwhbsrmgv6vldkhlo

После заполнения основных настроек профиля нажать Add images и указать имя образа виртуальной машины облачного агента, имя пустого облачного сервиса, максимальное количество агентов, размер агента, и префикс имени создаваемых агентов

1wh-bau5_nfg73bgftpou1mku

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

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

1dgdgtte6gmyiut7kofuuwirh

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

1dkitwqgobnl-1piu2so0r3wk

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

21s4nj_25a9nb2c-oe-0k2tkd

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

w5r4zpaf1icgabd086xw6ju5

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

18n5y0kzlq1lcawnlncwc0go7

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

1igj8ykgqqc6ckx6kro3ai0xe

© Habrahabr.ru