Рубрика:
БИТ. Бизнес & Информационные технологии /
Продукты и решения
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
СЕРГЕЙ РОМАНОВ, генеральный директор ООО «Ред Кейс»
Git и Redmine Элегантное решение для совместной работы над проектами
Компания, вложившая деньги в разработку программы или сайта, ищет способ организовать совместный труд разработчиков. Также необходим инструмент контроля и наблюдения за работой в реальном времени
Сегодня существует ряд бесплатных систем, позволяющих как ставить задачи и вести проекты, так и просматривать хранилище исходного кода. Рассмотрим наиболее полноценные:
- Bugzilla – неплоха, весьма популярна, но по удобству пользования и внешнему виду довольно архаична [1]. Нет wiki, линии времени, диаграммы Ганта и т.д.
- Bugtracker.NET – на первый взгляд приятен, и набор функций хорош, но использует .NET и работает только под Windows [2].
- Trac – вызывает уважение как система с полным набором современных функций трекинга и ведения проектов, но вот за удобство интерфейса не заслужил симпатии [3]. Плюс работа с несколькими проектами требует довольно нетривиальных телодвижений, в частности, создания отдельного окружения для каждого нового проекта. Когда их три – пять это еще терпимо, но если 30-50, а то и 150?
- Redmine – умеет все, что можно желать от системы ведения проектов и контроля версий [4], обладает интерфейсом, вызывающим восторг (см. рис.1), – продуманность разделов, Ajax-меню по правому клику мыши там, где это нужно, а также очень удобно организованное хранилище (см. рис. 2).
Рисунок 1. Интерфейс Redmine
Рисунок 2. Хранилище Redmine
По всем своим возможностям Redmine показался более подходящим для нашей задачи, теперь разберем, как настроить связку Redmine и распределенной системы управления версиями файлов Git [5]. В Git, в частности, трудятся разработчики Facebook, ядра Linux, языка Perl, OS Android и т.д. (Redmine используют разработчики языка Ruby, среды KDE, форумного движка phpBB, веб-сервера Lighttpd и т.д.).
Нам потребуется
Компьютер под управлением Linux (для ознакомления и тестов мы используем Ubuntu 10.10 Desktop [6]) с правами root. Для того чтобы выполнить запрос от имени суперпользователя, предусмотрена команда sudo.
Установка зависимости
Кроме Git и Redmine, нам потребуется Apache2 с модулем passanger и БД sqlite3. Также для удобства работы установим mc.
$ sudo apt-get install apache2 libapache2-mod-passenger sqlite mc
Теперь основное, устанавливаем Redmine:
$ sudo apt-get install git git-core redmine redmine-sqlite
Соглашемся с предложением настраивать Redmine через dbconfig-common, тип БД выбираем sqlite3.
Настройка
Создадим символическую ссылку на папку установки, дадим права и поднастроим веб-сервер:
$ sudo ln -s /usr/share/redmine/public /var/www/redmine $ sudo chown -R www-data:www-data /var/www/redmine $ sudo echo "RailsBaseURI /redmine" > /etc/apache2/sites-available/redmine $ sudo a2ensite redmine $ sudo service apache2 restart
Настроим почтовую подсистему (мы используем Exim4 [7] с использованием шаблона Internet Site):
$ sudo apt-get install exim4 $ sudo cp /usr/share/doc/redmine/examples/email.yml.example /etc/redmine/default/email.yml
Если при установке пакета не будет вопроса о конфигурации, то запустите то запустите команду:
sudo dpkg-reconfigure exim4-config
Отредактируйте созданный файл настройки почты /etc/redmine/default/mail.yml, измените в нем метод достаки почты, поменяв smtp на sendmal:
production: delivery_method: :sendmail smtp_settings: address: smtp.example.net port: 25 domain: example.net authentication: :login user_name: "redmine@example.net" password: "redmine"
Перезапустите веб-сервер:
$ sudo service apache2 restart
Администрирование
Для регистрации в админке Redmine используем адрес http://localhost/redmine. По умолчанию интерфейс английский, чтобы сменить язык на русский, переходим в Administration –> Options –> вкладка Display. Таким образом, изменится язык по умолчанию для новых пользователей, необходимо также посетить Users –> Admin –> General и выбрать русский язык для администратора.
Также загляните во вкладку Email Notifications («Уведомления по почте»), чтобы настроить исходящего адресата и параметры генерируемого письма.
В разделе Repositories («Хранилища») отключите поддержку ненужных типов репозиториев, в нашем случае оставьте только Git. Остальные настройки здесь трогать не надо.
Теперь сервер Redmine готов к заполнению контентом.
Работа с проектами
Для начала работы над первым проектом нужно:
- создать учетные записи пользователей;
- создать проект, включить туда необходимых пользователей;
- создать внутри настроек проекта новую (первую) версию.
Теперь внутри проекта появилась вкладка «Оперативный план», в которой мы видим, что пока нет задач, связанных с текущей версией.
Смело нажимаем «Новая задача», заполняем необходимые поля и обязательно указываем версию, к которой нужно привязать задание.
После создания мы увидим эту задачу в оперативном плане, а участникам система отошлет письмо о том, что для них есть работа. Процентная полоска строится из суммы процентов выполнения всех привязанных задач.
Далее, если зайти в созданное задание и нажать «Обновить», можно писать новые комментарии, которые выстроятся в ленту снизу. При обновлении задачи доступен функционал, позволяющий присоединять файлы, менять ответственного, версию, выставлять затраченное время и многое другое.
Промежуточный итог
Итак, мы развернули полномасштабную систему менеджмента, которая наряду со стандартными функциями (проекты, задачи) несет еще множество «вкусностей» (диаграмма Ганта, Вики, документация, новости и т.д.). Теперь пора переходить к «магической» части – настроим связку Redmine и системы контроля версий Git, для того чтобы отслеживать в интерфейсе Redmine, написанный разработчиками код и его версии.
Подключаем «машину времени»
Сразу оговорюсь, в этой статье описана простая схема безопасности, в которой все разработчики пользуются одним системным логином для доступа по SSH к репозиторию.
В больших проектах более удобен HTTPS-протокол средствами Apache WebDAV и htaccess [8].
Создадим иерархию каталогов для проектов и учетную запись пользователя в системе.
$ sudo adduser commiter --home /var/gitrepos/ $ sudo mkdir /var/gitrepos/superprogram
Система задаст несколько несложных вопросов, и пользователь будет создан.
Допустим, на сервере уже есть наработки по проекту (в примере это readme-файл), их нужно положить в каталог нашего проекта и дать полные права пользователю commiter:
$ sudo cp /home/pupkin/proga/readme.txt /var/gitrepos/superprogram $ sudo chmod -R 755 /var/gitrepos
Перейдем в каталог с проектом и инициализируем новый репозиторий. Затем добавим в него существующие файлы и применим изменения. Система всегда просит ввести комментарии касательно сделанных правок, просто впишем «Начало работы с Git»:
$ sudo cd /var/gitrepos/superprogram $ sudo git init && git config --global core.editor mcedit $ sudo git update-server-info $ sudo git add * $ sudo git commit -a
Теперь подключаем репозиторий к проекту внутри Redmine. Для этого идем внутри проекта в «Настройки –> Хранилище». Выбираем тип – git. Пишем путь – /var/gitrepos/superprogram/.git/.
Теперь мы видим файлы и историю их изменения на странице Хранилище внутри проекта!
Обращаю ваше внимание, что, открыв файл в хранилище, можно просмотреть, кто и когда изменял определенные строки. Или же вы можете видеть, например, сколько новых строк кода написал программист за то время, что он потратил на создание нового функционала.
Совместная работа с репозиторием
Теперь представим, что за соседним компьютером сидит программист Иван, который и должен работать над проектом. Предоставляем ему заранее созданные логин и пароль для Redmine, а также пароль пользователя commiter.
Иван устанавливает поддержку Git, mc и производит обязательную базовую настройку:
ivan$ sudo apt-get install git git-core ivan$ git config --global user.name "Имя Фамилия" ivan$ git config --global user.email "электронная почта" ivan$ git config --global core.editor mcedit
Далее он выполняет на своем компьютере (существуют также графические оболочки для Windows и Linux-систем, а также интеграция внутри IDE наподобие NetBeans, Eclipse и т.д.) команды для создания каталога, где он хочет у себя хранить файлы проекта, и для получения актуальной версии проекта из репозитория.
ivan$ mkdir /home/ivan/projects ivan$ cd /home/ivan/projects ivan$ git clone ssh://commiter@ВАШ_АДРЕС/superprogram/
В каталоге projects появился новый подкаталог superprogram с копией проекта и соответственно файлом readme.txt.
После того как он сделал необходимые изменения в файле или создал новые, он может применить (сделать commit) и затем загрузить их на сервер – элегантно и просто:
ivan$ mkdir /home/ivan/projects/superprogram ivan$ git add * ivan$ git commit -a ivan$ git push
Система спросит пароль пользователя commiter и загрузит изменения на сервер, которые тут же отравятся в Redmine.
Важно: для удобства работы в Redmine во время commit при вводе комментария скопируйте туда целиком название задачи с номером, например: «Доработки по Изменение #1: Разработать главное диалоговое окно программы» и тогда в хранилище внутри Redmine ваш комментарий станет кликабельным и будет вести на настоящую задачу.
Назад в будущее и параллельные реальности Git
Git скрывает в себе великое множество функций, связанных с версионностью содержимого, поддержкой ветвления разработки кода (скажем, ветка STABLE и DEVELOPMENT), возможностью отката назад и вперед во времени и многое другое, что никак не поместится в эту статью.
Теперь рассмотрим основы ветвления. По умолчанию создается одна ветка master, в которой вы и находитесь. Чтобы создать новую и перейти к ней, выполним следующие команды:
ivan$ git branch vetka2 ivan$ git chekout vetka2
Это создаст как бы параллельную реальность, в которой проект будет жить своей второй жизнью, и все изменения внутри одной ветви не затронут код в другой. И подобно сюжету в фантастическом фильме каждая реальность обретет свою линию времени, по которой можно путешествовать в обе стороны.
Чтобы откатиться до определенного состояния, можно просто заглянуть в раздел Хранилище, посмотреть уникальный номер редакции (например, e3feba7) и перейти к нему, что создаст новую временную ветку от этого момента времени.
ivan$ git chekout e3feba7
***
Подводя итог можно с уверенностью сказать, что теперь мы обладаем самым мощным на сегодняшний день инструментом совместной работы и контроля за проектами (к тому же бесплатным). С помощью рассмотренной связки Redmine и Git менеджер явно видит, на что было потрачено рабочее время, какие строки кода были дописаны и кем, благодаря чему может верно спланировать ход работ, создав задачи и обновив существующие.
Все участники проекта всегда в курсе происходящего в режиме реального времени благодаря системе оповещения по почте (также есть поддержка RSS, Atom, Twitter). Диаграмма Ганта помогает планировать свое время (см. рис. 3).
Рисунок 3. Диаграмма Ганта
Проекты получают несколько дополнительных уровней отказоустойчивости из-за наличия копии на каждом компьютере разработчика и на сервере, а также возможности отката.
Руководство получает защиту от больших потерь денег и интеллектуальной собственности.
И самое приятное – система обладает несметным количеством встроенных функций, позволяющих ускорить работу над проектом, также доступно множество плагинов и интеграций – все это почва для изучения и развития себя как системного администратора!
- Сайт Bugzilla – http://git-scm.com.
- Сайт Bugtracker – http://ifdefined.com/bugtrackernet.html.
- Сайт Trac – http://trac.edgewall.org.
- Сайт Redmine – http://www.redmine.org.
- Сайт Git – http://git-scm.com.
- Сайт ОС Ubuntu Linux – http://ubuntu.com.
- Сайт почтовой системы Exim– http://www.exim.org.
- Настройка Git через WebDav – http://www.kernel.org/pub/software/scm/git/docs/howto/setup-git-server-over-http.txt.
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|