- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

Будут описаны следующие действия:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Создание образа облачного агента

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Настройка локального GIT

Создадим новый репозиторий в GitHub.

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

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

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

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

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

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

Если вы работаете из корпоративной сети, то clone команда может отвалиться из-за проблем с прокси. Настроить и обойти данную коммуникационную проблему я смог только с помощью установки локального NTLM прокси сервера, который перенаправлял запросы корпоративный прокси. Дистрибутив прокси сервера можно взять здесь [7].
После успешной настройки следует сконфигурировать прокси для Git, для этого надо выполнить следующие команды:

git config --global http.proxy localhost [8]:{cntlm-proxy-port}
git config --global https.proxy localhost [9]:{cntlm-proxy-port}

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

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

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

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

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

Создание веб сайта в Azure

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

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

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

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

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

git.exe push -f адрес

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

Настройка билда

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавление и запуск облачных агентов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Проверка работы

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

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

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

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

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

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

Автор: ahriman

Источник [12]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/testirovanie/84557

Ссылки в тексте:

[1] ins4n3: http://habrahabr.ru/users/ins4n3/

[2] #mstesting: http://habrahabr.ru/search/?q=%5Bmstesting%5D&target_type=posts

[3] загрузим дистрибутив TeamCity: http://www.jetbrains.com/teamcity/download/index.html

[4] http://localhost/mnt: http://localhost/mnt

[5] плагин: http://blog.jetbrains.com/teamcity/2014/11/introducing-teamcity-azure-plugin-run-builds-in-the-cloud/

[6] Скачать и установить Git for Windows: http://git-scm.com/download/win

[7] здесь: http://cntlm.sourceforge.net/

[8] localhost: http://localhost

[9] localhost: https://localhost

[10] Скачать плагин для управления облачными агентами: https://github.com/JetBrains/teamcity-azure-plugin

[11] https://manage.windowsazure.com/publishsettings: https://manage.windowsazure.com/publishsettings

[12] Источник: http://habrahabr.ru/post/252023/