AppCode, GIT, TeamCity и YouTrack или повесть о поиске серебряной пули для процесса разработки.

Стремление к разумному порядку – вполне естественно. Отправляя очередную подборку изменений в Git, которые затрагивали совершенно разные аспекты приложения, я решил для себя – хватит.
Но какие варианты? Писать на бумаге лучше, чем ничего, но нет поиска, исправления марают бумагу, пойди потом разбери, да и не серьезно. Вести текстовый файл/электронную таблицу – все-таки не то, со временем файл разрастется и без средств управления все равно процесс скатится в свалку.
Значит нужно профессиональное решение. Какие требования я выставлял:
– Багтрекинг система
– Возможность time management
– Интеграция в IDE
– Размещение у себя локально, а не в облаке
– Бесплатность

Прочитал обзоры, и остановился на решении от JetBrains. На мой взгляд, решение получилось слегка усложненным, особенно в моем случае, т.к. работаю я один, но с другой стороны удобство использования перекрывает неудобство настройки.
Итак, разработка ведется в IDE от JetBrains – AppCode, купленном на распродаже в честь конца света за 25$.
В качестве багтрекинг/time management системы будет выступать их разработка YouTrack выглядящая как то так:
Снимок экрана 2013-09-23 в 9.41.19 AM

Позволяет открывать баги, фичи. Поддерживает трекинг времени. Есть интеграция с AppCode, с Git  через TeamCity .
И главное, система полностью бесплатна без каких либо ограничений для команд до 10 человек.

TeamCity в моем случае нужен лишь для корректной интеграции YouTrack с Git. Тоже бесплатен, но со следующими ограничениями
• Run a TeamCity server with the maximum of 20 build configurations for free
• Connect 3 build agents per each TeamCity server at no additional cost

Что же получится в итоге? Рассмотрим жизненный цикл процесса на примере одного бага.
Итак, мы нашли баг. Допустим кнопка в приложении не нажимается.
Заходим в YouTrack систему, жмем CreateIssue, и вводим название “Кнопка на форме создания аккаунта не нажимается”,  заполняем расширенное описание (Description) если нужно и выставляем эстимейт к примеру в 1h (1 hour = 1 час). Жмем CreateIssue.

Снимок экрана 2013-09-23 в 12.17.09 PM
Все, у нас теперь есть баг. Мы хотим его пофиксить.
Зходим в AppCode и в меню “Tools -> Tasks & Contexts -> OpenTask” (либо Alt+Shift+N) вызываем окно открытия задачи. Выбираем ее из списка
Снимок экрана 2013-09-23 в 4.17.20 PM

Снимок экрана 2013-09-23 в 4.20.53 PM

По опциям:

Clear Current context – закроет все открытые файлы
Mark as ‘In Progress’ – пометит базу в YouTrack как взятый в разработку
Create Branch – если надо создать ветку в git
Create changelist – обязательно чтобы стояла галочка, именно благодаря этому AppCode при отправке изменений по багу в git – проставляет корректный комментарий, который закроет баг в системе YouTrack с указанием ревизии git
Далее вносим изменения в код и делаем Commit changes

Снимок экрана 2013-09-23 в 4.21.28 PM

В первый раз AppCode попросил меня ввести из под какого пользователя делать commit

Снимок экрана 2013-09-23 в 4.27.32 PM

Я указал стандартного
mainuser
[email protected]

И вот теперь начинается магия:
В TeamCity мы видим что коммит был учтен

Снимок экрана 2013-09-23 в 4.29.20 PM

В YouTrack мы видим, что баг был автоматически закрыт с указанием того кто закрыл и с какой ревизией в системе Git, что позволяет тут же в браузере открыть и посмотреть какие файлы менялись и как.Снимок экрана 2013-09-23 в 4.33.52 PM

Снимок экрана 2013-09-23 в 4.33.33 PM

Если вам по душе такой процесс разработки, то начнем настройку.

Настроим для начала YouTrack

Итак, на руках у нас чистая инсталляция Mac Os 10.8.2, с установленным XCode.
Скачиваем YouTrack http://www.jetbrains.com/youtrack/download/get_youtrack.html
Здесь описаны варианты установка stand-alone варианта под MAC. http://confluence.jetbrains.com/display/YTD5/YouTrack+on+Mac+OS
Я в итоге выбрал вариант “Mac OS. JAR in Apache Web Server
Если кто не знал, даже на чистой MacOS уже установлен Apache, в чем можно убедиться набрав в консоли httpd
Конфиг находится здесь: /private/etc/apache2/httpd.conf
А документы здесь: /Library/Webserver/Documents/
В Папке Пользователя создаем папку YouTrack и перемещаем туда скачанный jar (в моем случае получился путь /Users/Admin/YouTrack/youtrack-5.0.3.jar)
Создаем в папке YouTrack файл run.sh и пишем туда

где 5.0.3 – версия jar’а, и в вашем случае может быть другой
1300 – порт по которому будет доступен YouTrack сервер, и может быть любым выбранным вами.
-XX:MaxPermSize=512m – количество памяти, без этой опции YouTrack у меня запустился, но при попытке сконфигурировать на первой же странице потребовал больше памяти. Я пробовал выставить 150 мегабайт, создать проект получилось но в определенный момент сервер упал по всей видимости от недостатка памяти, при 512 мегабайтах проблем не наблюдал.
Даем права на выполнение run.sh

После этого я попробовал запустить скрипт и MacOS сообщила, что у меня не установлена Java SE и предложила установить, что ж, даем добро и ждем, качать порядка 70 метров
Запускаем еще раз, если все прошло успешно (в первый раз я указал порт не 1300 а 130 и в итоге не хватило прав запуска), в браузере откроется страница установки YouTrack
BaseUrl – я обычно меняю на ip адрес своего сервера, т.к. он у меня задан жестко, а не через DHCP, это дает возможность без модификаций в hosts на других машина получать доступ по ip к системе YouTrack
User Registration – обычно тоже отключаю, в небольшой компании лучше чтобы регистрацией занимался 1 человек.
Guest Account я не включал, нужен ли он , – решать вам
Начиная с 5й версии – доступны локализации YouTrack, в том числе и русская, причем поменять можно и после установки, но я все таки для работы предпочитаю английский, тем более что обычно документация пишется все таки на английском.
Соглашаемся с условиями пользования и жмем Save
Все, мы установили YouTrack. На выходе мы получаем такую страницу

Снимок экрана 2013-09-23 в 11.30.20 AM
Переходим в меню Users и создаем основного пользователя котоырым мы будем создавать тикеты и фиксить тоже. Крайне важно, чтоб логин и email пользователя в системе YouTrack и в TeamCity были идентичны, повторюсь и логин и Email, это стоило мне 3 часа свободного времени и полкило нервных клеток, без этого интеграция интегрировалась, интегрировалась да не выинтегрировалась.
Жмем Create user, заполняем

Снимок экрана 2013-09-23 в 11.46.26 AM

Переходим во вкладку  User Own Roles и выбираем к примеру Admin (в вашем случае нужно будет лучше выбрать Developer или Reporter, в зависимости от задач этого пользователя)

Далее переходим в раздел Projects, жмем Create» и заполняем поля

Снимок экрана 2013-09-23 в 11.51.20 AM
Обратите внимание на поле ID, нужно выбрать говорящий акроним, ибо в дальнейшем все баги, фичи будут уникально идентифицироваться как TP-345, TP-1300 и т.д.
Далее надо выбрать Assignees, – по сути ответственных за проект. В зависимости от того сколько человек и с какими ролями работают над проектом выбирайте Add users group. или Add individual user. В моем случае будет Add individual user
Если есть человек по умолчанию ответственный за открытые тикеты, его можно указать, чтобы не выбирать каждый раз, для этого переходим во вкладку Fields и выбираем Default Value для строки Assignee. Здесь же можно выбрать и другие значения по умолчанию, баг будет открыт или фича, какого приоритета и т.д.

Снимок экрана 2013-09-23 в 12.03.17 PM

Для включения возможности эстимировать время – переходим во вкладку Time Tracking и жмем Enable time tracking for project и подтверждаем в появившемся диалоге добавление двух полей для эстимированного времени и реально затраченного.

Нам осталась последняя опция – интеграция с TeamCity, но т.к. сам TeamCity нами пока не был установлен и настроен – отложим на потом. Пока можно поиграться с трекинговой системой.
Открываем основную URL трекинговой системы (В моем случае http://admins-mac.local:1300/dashboard , но я буду указывать ссылки через 127.0.0.1, которые должны открыться и у вас при условии такого же указанного порта. Так что ссылка будет http://127.0.0.1:1300/dashboard ) Жмем Create Issue, заполняем, отправляем

Снимок экрана 2013-09-23 в 12.17.09 PM

вот так можно вносить время потраченное на тикет:

Снимок экрана 2013-09-23 в 12.20.51 PM

Далее обзор открытых тикетов. YouTrack имеет “умный поиск”, к примеру можно отобразить все непофикшенные баги которые были назначены вам и все это в строке поиска, а если такой запрос часто будет использоваться – сохранить его и он появится слева в списке. Вообще возможности YouTrack выходят за рамки данной статьи, я описываю лишь как заставить все это добро заработать, а тонкостям надо будет обучаться по документации.

Снимок экрана 2013-09-23 в 12.21.12 PM

Снимок экрана 2013-09-23 в 12.22.15 PM

Снимок экрана 2013-09-23 в 12.23.30 PM

Но мое счастье было бы не полным, без интеграции с IDE и Git.
Нужно создать какой-то проект в XCode, я надеюсь это не вызовет затруднений, главное не снимать галку создания локального git.

Время установить и настроить TeamCity
Скачиваем последнюю версию отсюда: http://www.jetbrains.com/teamcity/download/index.html
Весит кстати не слабо, больше 400 метров.
Скачиваем, распаковываем, перемещаем себе в рабочую папку, в моем случае: (/Users/Admin/TeamCity)
Хотя нужно учитывать, что TeamCity при активной разработке может скушать немало места, поэтому если у вас SSD  – лучше устанавливать на hdd.
В консоли набираем

(напоминаю, что /Users/Admin/TeamCity/ – это куда установлено у меня, вы используйте свой путь)
Открываем http://localhost:8111
Перед нами страница первичной настройки TeamCity

Снимок экрана 2013-09-23 в 12.57.11 PM

Как видно, в моем случае данные TeamCity будут храниться по пути /Users/Admin/.BuildServer, если нужно убрать данные с ssd, то нужно задать переменную TEAMCITY_DATA_PATH подробно об этом можно прочитать здесь:
http://confluence.jetbrains.com/display/TCD8/TeamCity+Data+Directory
Если вкратце, то редактируем /etc/launchd.conf (создаем, если его нет) и добавляем строку

Понятно, что  данном конкретном случае данные будут размещаться по прежнему на системном разделе, в случае другого hdd путь будет выглядеть примерно так: /Volumes/1Tb/TeamCityData где 1Tb – имя второго hdd
В Терминале выполняем

и редактируем, как было сказано выше
Перезагружаем Mac

Снова в Терминале выполняем

Заходим по адресу http://localhost:8111 и наблюдаем уже верно проставленную папку для данных:Снимок экрана 2013-09-23 в 2.29.58 PM

Жмем Proceed
Ставим галочку у лицензионного соглашения и жмем Continue
Создаем Основного пользователя:

Снимок экрана 2013-09-23 в 2.32.43 PM

Не забываем для пользователя проставить идентичный email

Снимок экрана 2013-09-23 в 2.33.52 PM
Настало время создать проект:
В меню выбираем Projects – > Create a project
Заполняем данные

Снимок экрана 2013-09-23 в 2.36.08 PM
Далее жмем кнопку Create build configuration

Снимок экрана 2013-09-23 в 2.37.50 PM
Далее жмем VCS Settings и там жмем Create and attach new VCS root

Снимок экрана 2013-09-23 в 2.45.07 PM

Заполняем данные.

В поле Fetch URL: * указываем путь к локальной папке git нашего проекта (В моем случае это /Users/Admin/Desktop/TestProject/.git/)
Жмем кнопку Test Connections, чтобы проверить не ошиблись ли мы. Если все в порядке – жмем кнопку Save, На открывшейся странице жмем Add Build Step

В открывшейся странице выбираем Runner type: XCode Project
Path to the project or workspace
:  жмем на иконку файловой структуры и выбираем наш xcodeproj
Ну и в остальных полях выбираем какой же вид билда нам нужен:

Снимок экрана 2013-09-23 в 4.56.24 PM

Перепроверяем все и жмем Save
C TeamCity мы закончили, возвращаемся в YouTrack

Заходим в раздел администрирования нашего проекта (В моем случае http://127.0.0.1:1300/editProject/TP#project-tab=TeamCity)

Снимок экрана 2013-09-23 в 2.56.39 PM
И жмем Start to configure connections.
Нажимаем Common Settings и видим строку в диалоге
0 0 * * * ?
Это означает, что YouTrack раз в час будет синхронизироваться с изменениями в TeamCity. Как по мне это долго, и на своей рабочей машине я выставил в 5 минут.
0 0/5 * * * ?
Если кто то хочет разобраться как настраивать – в диалоге указана ссылка с объяснениями.
Далее жмем Add TeamCity Server

Снимок экрана 2013-09-23 в 3.02.00 PM

Заполняем данными нашего TeamCity сервера и жмем Save
Теперь надо добавить этот TeamCity сервер конкретно в проект.
Идем по ссылке http://127.0.0.1:1300/editProject/TP#project-tab=TeamCity (где TP –ваш проект)Снимок экрана 2013-09-23 в 4.31.27 PM

И выполняем Mapping

Снимок экрана 2013-09-23 в 4.31.47 PM

Осталось самое приятное, работа с IDE (AppCode)
Запускаем AppCode и т.к. это наш первый запуск, программа ругается на то, что не может найти git, что вполне естественно, т.к. он пока собственно и не установлен. Качаем и устанавливаем отсюда http://www.wandisco.com/git/download (на момент написания статьи актуальная была версия 1.8.4)
В Терминале выполянем

и добавляем строку

Сохраняем.

Так же, чтобы не париться каждый раз с двойным запуском создадим в нашей домашней директории скрипт который будет запускать и YouTrack и TeamCity.
В консоли выполняем

и вставляем:

Сохраняем. Выполняем

Запускать же команду можно не просто как ./startAll.sh, ведь в таком случае в окне консоли будет постоянно идти вывод из YouTrack’а, и в случае закрытия окна терминала – сервера тоже выключатся, поэтому запускать будем так:

nohup – означает, что даже после закрытия окна консоли откуда была выполнена команда старта серверов – сервера продолжат жить спокойно
& – запуск в фоне

Далее в AppCode  конфигурируем сервер.

Снимок экрана 2013-09-23 в 3.40.28 PM

Снимок экрана 2013-09-23 в 3.44.22 PM

Снимок экрана 2013-09-23 в 4.13.05 PM

Так же настраиваем Commit Message. Таким образом при коммите изменений по багу, будет автоматически добавляться сообщение благодаря которому YouTrack автоматически закроет баг с которым мы работали.

Снимок экрана 2013-09-23 в 4.13.45 PM

На этом все. Надеюсь этот мануал сэкономит не один час.

P.S. Эти инструменты позволяют сделать намного больше. Я не стал затрагивать Unit test’ы, создание билдов посредством TeamCity (хотя все для этого мы настроили, достаточно запустить). Но это уже не столь важно, главное теперь у вас под рукой есть работающая система, которую можно обустраивать по своему вкусу.