Redmine on windows git

Redmine

Latest releases¶

Resources¶

HowTo configure Redmine for advanced git integration¶

Scope¶

Install on Centos 6.x

This HowTo explains how to serve git repositories on apache through the http-based git-smart-http protocol introduced in git 1.6.6.

The git-smart-http offers various advantages over ssh or git-based access: you can use redmine access control as-is, no need for extra ssh keys or whatnot, you can secure it through SSL as needed, and there’s generally less problems with firewalls and https/https ports than exist with ssh and git ports. git-smart-http also doesn’t have some of the drawbacks of its «dumb» predecessor, as it doesn’t require any complex DAV setup.

This HowTo is mainly written from memory and was conducted on a setup which was already serving svn repositories integrated with redmine, so it might be possible that I forgot some things or take them for granted.

This is a wiki page, feel free to correct or amend anything you find lacking 🙂 You can also drop me a line.

Another option to integrate grack with redmine is the modified grack+redmine plugin or any other grack modified for redmine, though those ones lack documentation and I haven’t tried them, so I can’t say much about those.

Prerequisites¶

  • Apache with mod_perl (access control)
  • git (version at least 1.6.6)
  • A way to serve git-smart-http
    • mod_cgi (or mod_cgid) if you want to use the stock git-http-backend
    • a rack server if you want to use grack (basically a rack wrapper around the right git commands) or
      git-webby (another implementation based on grack but written in Sinatra).

You should already have a rack server to run redmine, and that’s why I chose grack as the backend and which I will describe in this tutorial.

Using the stock git-http-backend should be quite straightforward though (skip the grack installation part and get your install with the git-http-backend going (the git-http-backend manpage has some examples), when that’s done go on with the access control part).

Install Git¶

Install grack¶

Get the sources¶

Fetch grack from its github repository, I checked out mine to /var/www/grack

And create a directory for repositories :

Configuration¶

Edit the config.ru file and adapt it to your local configuration. project_root must contain the path to the directory containing your git repositories, git_path must obviously contain the path to the git, mine looks like this (on gentoo):

If you use the latest version of grack, then may be this config.ru file is usable

Don’t forget to install dependencies of grack

Integrate with Apache¶

You could obviously use any rack server you like at this point, but the access control mechanism Redmine.pm is written for apache with mod_perl, so you will at least need to reverse proxy your rack server through apache.

My rack server of choice is passenger (solid performance, apache module, mostly simple configuration) and it is already configured on my system.

As passenger installation and configuration is not within the scope of this HowTo, please refer to the passenger documentation or to the passenger installation guide from your distribution.

There’s a little more work to do here to get passenger to work with this, you will need to create the directories public and tmp in the grack directory.

Please also be aware that in the standard configuration, passenger will run the grack application with the same user and group owning the config.ru file. This user must have read- and write-access as needed to the git repositories!

Create directories ‘public’ and ‘tmp’ in /var/www/grack for apache :

Edit config file «/etc/httpd/conf/httpd.conf» for support multi virtualhost by remove comment :

Create a file virtualhost :

In controlpanel DNS record at domain name page, create a subdomain with name «git.yourdomain.com» and point to your IP server.

At this point, if you have a repository in «/opt/repositories/git/myrepo», you should be able to access it through «http://git.yourdomain.com/myrepo», for example :

Use a git client as Gitbash or TortoiseGit to clone repos :

If it successful, git on server and connection is very good!

Access control¶

You now have a working git server, albeit with no access control. Currently, the shipped perl module for access control Redmine.pm (in extra/svn/ in your redmine directory) does not support access control for the git-smart-http protocol, the patch in #4905 aims to implement that.

Читайте также:  Настройка трекпада macbook windows

Applying the patch¶

If you are using Redmine >= 2.1.0, step over to Configuring Apache

Download the latest (or better: correct) version of the patch from #4905 to your redmine directory. In the redmine directory, apply the patch: patch -p1 should work (if it tells you stuff about being unable to apply a hunk, the patch is incompatible with your Redmine.pm version, if it says other stuff, try patch -p0 or patch Redmine.pm , if it still borks, ask for advice on #4905).

You will possibly still need to edit the file from here, because the current version of the patch only works for repositories served from http://git.myhost.com/git/myrepo though the above example uses http://git.myhost.com/myrepo . This step isn’t needed anymore, the patch has been updated to take the information from the Location block from apache into account.

Configuring Apache¶

You now have to make Apache aware of your new authentication module (if you already had done this step for subversion integration, you can go to the Location directives directly).

Copy or link Redmine.pm (from your extra/svn/ directory) to /usr/lib/perl5/Apache/Redmine.pm (ubuntu) or wherever your distribution puts its apache perl modules (e.g. gentoo puts them in /usr/lib64/perl5/vendor_perl/5.8.8/Apache/ , fedora puts them in /usr/lib64/perl5/vendor_perl/Apache/ ).

Having done that, reload apache to make sure everything in the patching phase went well (if not, remove the link or the file create in the step just before and restart apache to get apache back up, try to find the error in your Redmine.pm file). Now edit your vhost configuration to look somewhat like (same as above but with more stuff):

Restart your apache, and everything should be good and well 🙂

Known issues¶

If you are using the stock git-http-backend directly under apache and you are finding errors like «Request not supported: ‘/git/your-git-repo'» in your apache error log, you may need to add «SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER» to the to the list of environment variables that you are setting in your apache configuration.

Unfortionately, this setting may cause redmine to borke. If so, you will need to set the variable for only the requests that are passed through git-http-backend. One way to accomplish this is with mod_rewrite. Below is a sample apache configuration from a Fedora 17 system that uses git-http-backend and mod_rewrite.

You will also need to have the perl modules Net::LDAP, Authen::Simple, and Authen::Simple::LDAP installed. The first two are available in Fedora’s default package repositories.

The third must be installed after the other two and it must be obtained directly from cpan. Below are the commands that I used to install these packages on Fedora 17.

yum -y install gcc make perl-LDAP perl-Authen-Simple
cpan
cpan> install Authen::Simple::LDAP

Git и Redmine. Элегантное решение для совместной работы над проектами

Архив номеров / 2011 / Выпуск №4 (101) / Git и Redmine. Элегантное решение для совместной работы над проектами

СЕРГЕЙ РОМАНОВ, генеральный директор ООО «Ред Кейс»

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. Диаграмма Ганта

Проекты получают несколько дополнительных уровней отказоустойчивости из-за наличия копии на каждом компьютере разработчика и на сервере, а также возможности отката.

Руководство получает защиту от больших потерь денег и интеллектуальной собственности.

И самое приятное – система обладает несметным количеством встроенных функций, позволяющих ускорить работу над проектом, также доступно множество плагинов и интеграций – все это почва для изучения и развития себя как системного администратора!

Чтобы легко можно было учитывать время в redmine можно использовать http://rmclient.org
Rmclient совместим c Redmine 2.3.1 и поддерживается на Windows, Mac OS. Прост и удобен, обновляется и бесплатный! Приятного пользования.

Комментарии могут оставлять только зарегистрированные пользователи

Читайте также:  Как стать администратором mac os
Оцените статью
Рубрика: БИТ. Бизнес & Информационные технологии / Продукты и решения