RedMine + BitBucket git

В данной статье будет описана связка системы управления проектами RedMine + BitBucket. Я опишу достаточно примитивный способ — подключение зеркала репозитория BitBucket, так как ни один из найденных мной плагинов для RedMine не заработал.

Так как RedMine по умолчанию может работать только с локальными репозиториями, то мы организуем зеркало (выполним клонирование с ключом --mirror) репозитория с BitBucket на локальный сервер с RedMine, а затем подключим его как локальный к проекту.

Также мы будем периодически выполнять git fetch --all -p, чтобы синхронизировать наше зеркало с репозиторием.

Итак. Приступим.

Подготовительные работы

Создадим каталог на нашем сервере с RedMine, в котором будет находиться зеркало репозитория, сделаем его владельцем пользователя redmine. Далее все действия будем выполнять от имени пользователя redmine.

mkdir -p /var/repo
chown -R redmine:redmine /var/repo
sudo -su redmine

В каталоге /var/repo будет находиться каталог с зеркалом репозитория.

Создание ключей SSH

Ключи SSH нужны для доступа к репозиторию на сервере BitBucket. Мы создадим пару ключей (приватный и публичый), затем добавим публичный ключ DeploymentKeys нашего проекта в BitBucket.

Не забудьте изменить команду таким образом, чтобы адрес репозитория и название проекта соответствовали действительности. Далее для простоты везде будет использовано имя myproject.

Создаем ключи:

ssh-keygen -t rsa -N '' -f /home/redmine/.ssh/myproject -C 'RedMine'

В результате в каталоге /home/redmine/.ssh будут созданы два файла: myproject и myproject.pub. Теперь нужно добавить публичный ключ в наш проект в BitBucket.

cat /home/redmine/.ssh/myproject.pub

Данная команда выведет в терминал содержимое файла — скопируйте его в буфер обмена.

Теперь перейдите в свой проект в BitBucket, в левом меню внизу нажмите Settings и затем в меню настроек выберите Deployment keys.

Нажмите Add Key, укажите понятую Вам метку ключа, чтобы Вы могли в них ориентироваться, если их будет несколько, затем в поле Key вставьте из буфера скопированный ключ. Нажмите Add Key.

Клонирование репозитория

Теперь вернемся к нашему серверу RedMine.

Сперва нужно выполнить первоначальное клонирование репозитория в режиме mirror. При первом запуске git ответьте yes на предложение аутентифицировать сервер.

cd /var/repo
git clone --mirror git@bitbucket.org:myaccount/myproject.git myproject

Теперь выполним получение (fetch) всего репозитория.

cd myproject && git fetch --all -p

Теперь у вас локально имеется зеркало Вашего репозитория из BitBucket.

Настройка хранилища проекта RedMine

Локальное зеркало репозитория имеет путь /var/repo/myproject — его-то мы и добавим в настройках проекта в хранилище. На самом деле вместо myproject будет имя Вашего репозитория, как было сказано в предыдущем параграфе.

Откройте настройки проекта в RedMine и перейдите во вкладку Хранилище (в настройках, а не в самом проекте).

Нажмите Новое хранилище.

Выберите тип хранилища: git, при необходимости задайте уникальный идентификатор, затем укажите путь к репозиторию: /var/repo/myproject. Нажмите кнопку Создать.

Теперь перейдите в хранилище самого проекта. Первая загрузка может быть достаточно долгой. Дождитесь завершения. В итоге Вы должны увидеть файлы Вашего проекта. Попробуйте переключиться между ветками либо метками — всё должно работать.

Теперь снова вернитесь в настройки проекта — хранилища и напротив Вашего хранилища нажмите Пользователи. Выполните сопоставление пользователей и нажмите Сохранить.

Всё получилось!

Периодиечская синхронизация зеркала

На самом деле, все изменения, произведенные с репозиторием, автоматически не отражаются в его зеркале. Необходимо периодически выполнять команду get fetch --all -p для выполнения синхронизации.

Для этого следует добавить запись в crontab удобным Вас способом. Я предпочитаю добавлять файлы в каталог /etc/cron.d, Вы же можете воспользоваться командой crontab -e. Главное, чтобы нижеприведенные команды запускались от имени пользователя redmine.

Итак, давайте создадим файл nano /etc/cron.d/bitbucket с вот таким содержанием:

*/5 * * * *    redmine    cd /var/repo/myproject && git fetch --all -p

Или же вместо создания файла можем выполнить crontab -e и заполнить файл такой же самой строкой, но без указания имени пользователя:

*/5 * * * *    cd /var/repo/myproject && git fetch --all -p

Вы должны использовать какой-то один из способов, но не оба сразу.

Таким образом, мы добавили в крон задание, которое будет выполняться каждые 5 минут и производить синхронизацию нашего зеркала репозитория с репозиторием в BitBucket.

На этом всё. Успехов в разработке!

Литература:
[1] http://www.redmine.org/projects/redmine/wiki/HowTo_Easily_integrate_a_(SSH_secured)_GIT_repository_into_redmine
[2] http://stackoverflow.com/a/5968449

Добавить комментарий