Задача: Проработать шаги по настройке связки Redmine 3.4.4
и системы контроля версий базирующейся на Mercurial
, плюс при создании проекта именем проекта именовался репозитарий и доступ к нему через Web
–интерфейс только тем кто обозначен в Redmine
правами доступа. Откуда такой интерес? Просто когда я был на одном из собеседовании то в вакансии было требование работа используя связку Redmine + GIT
(данную связку я проработаю обязательно и постараюсь опубликовать в следующих заметках), а я рассказал о своем опыте описанном в этой заметке. Главное принцип один и тот же, значит вникнуть как используется на рабочем месте я смогу.
Все работает от 08.05.2019
Шаг №1: tips_ubuntu_18_04_redmine_v1.odt
Шаг №2: Устанавливаю на систему необходимые пакеты уже после развернутой из заметки Redmine on Ubuntu 18.04.
ekzorchik@srv-bionic:~$ sudo apt-get install apache2 apache2-utils libapache2-mod-wsgi python-setuptools python-pip mercurial libapache2-mod-perl2 libapache-dbi-perl libdbd-mysql-perl -y
Шаг №3: Поднимаю связку Mercurial + Web
интерфейс, в основе шаги из заметки:
ekzorchik@srv-bionic:~$ sudo mkdir /var/www/html/hg ekzorchik@srv-bionic:~$ sudo nano /var/www/html/hg/hgwebdir.cgi #!/usr/bin/python from mercurial import demandimport; demandimport.enable() from mercurial.hgweb.hgwebdir_mod import hgwebdir import mercurial.hgweb.wsgicgi as wsgicgi application = hgwebdir('hgweb.config') wsgicgi.launch(application) sudo nano /var/www/html/hg/hgweb.config [paths] /=/var/www/html/hg/** [web] allow_push = * push_ssl = false allowbz2 = yes allowgz = yes allowzip = yes ekzorchik@srv-bionic:~$ sudo chown -R www-data:www-data /var/www/html/hg/* ekzorchik@srv-bionic:~$ sudo chmod gu+x /var/www/html/hg/hgwebdir.cgi ekzorchik@srv-bionic:~$ sudo nano /etc/apache2/sites-available/hg.conf PerlLoadModule Apache2::Redmine ScriptAliasMatch ^/hg/(.*) /var/www/html/hg/hgwebdir.cgi/$1 <Directory /var/www/html/hg> Options +ExecCGI </Directory> <Location /hg> AuthType Basic AuthName "Mercurial" Require valid-user AuthUserFile /dev/null #Redmine auth PerlAccessHandler Apache::Authn::Redmine::access_handler PerlAuthenHandler Apache::Authn::Redmine::authen_handler RedmineDSN "DBI:mysql:database=redmine_default;host=127.0.0.1" RedmineDbUser "redmine/instance" RedmineDbPass "712mbddr@" </Location> ekzorchik@srv-bionic:~$ sudo a2ensite hg.conf ekzorchik@srv-bionic:~$ sudo ln -s /usr/share/redmine/extra/svn/Redmine.pm /usr/lib/x86_64-linux-gnu/perl5/5.26/Apache2/ ekzorchik@srv-bionic:~$ sudo a2dismod mpm_event ekzorchik@srv-bionic:~$ sudo a2enmod mpm_prefork cgi ekzorchik@srv-bionic:~$ sudo pip install demandimport ekzorchik@srv-bionic:~$ sudo service apache2 reload ekzorchik@srv-bionic:~$ sudo a2dissite Your choices are: 000-default hg Which site(s) do you want to disable (wildcards ok)?
Открываю Web
-страницу http://IP&DNS
доступа в Redmine
, авторизуюсь:
Login: admin
Pass: Aa1234567
перехожу «Администрирование
» – «Настройки
» – «Хранилища
» и привожу «Включенные SCM
» к виду где стоит отметка галочкой у системы хранения версий Mercurial
, у всех других галочку снимаю и нажимаю «Сохранить
». Как видно у меня Mercurial
версии 4.5.3
Репозитории будут доступны по адресам http://[my
site or ip]/hg/*.
Например, для проекта project адрес будет таким http://[my
site or ip]/hg/project.
Если у проекта project
будет подпроект subproject1
, то его репозиторий будет доступен по адресу http://[my
site or ip]/hg/project/subproject1.
Создаю первый проект:
«Проекты» - «Новый проект»
Имя: example
и нажимаю «Создать
», затем зайти в созданный проект «example
», перейти в «Настройки
» – «Участники
» – «Новый участник
» и добавить необходимых, в рамках изучения добавляю группу «Redmine Admin
» и отмечаю роли: Manager & Developer.
После нажимаю «Добавить
»
После создаю «Новое хранилище
» для созданного проекта, для этого перехожу в настройку «Хранилища
» – «Новое хранилище
»:
Тип хранилища: Mercurial
Хранилище по умолчанию: отмечаю галочкой
Уникальный идентификатор: example (к примеру в честь названия проекта)
Путь к хранилищу: /hg/example
Кодировка пути: UTF-8
и нажимаю «Создать
»
Теперь создаю вручную репозитарий на Ubuntu 18.04 Server
где развернут Mercurial + Redmine
и инициализирую:
ekzorchik@srv-bionic:~$ cd /var/www/html/hg/ ekzorchik@srv-bionic:/var/www/html/hg$ sudo mkdir example ekzorchik@srv-bionic:/var/www/html/hg$ cd example/ ekzorchik@srv-bionic:/var/www/html/hg/example$ sudo hg init ekzorchik@srv-bionic:/var/www/html/hg/example$ cd ~ ekzorchik@srv-bionic:~$ sudo chown -R www-data:www-data /var/www/html/hg/example/
После проверяю, что могу зайти в через Web
в репозитарий проекта: http://IP&DNS/hg/example
авторизуюсь под учетными данные которые имеют доступ в созданный проект, т. к. я создал под учетной записью admin
то их и указываю:
Нажимаю «Вход
», но почему-то не пустило
Нужно было в hg.conf
поправить <Directory hg>
на <Directory /var/www/html/hg>
, после сохранить внесенные изменения и перезапустить Apache2:
ekzorchik@srv-bionic:~$ sudo systemctl restart apache2 && sudo systemctl status apache2 | head -n5
Затем нажав клавишу F5
у меня отобразился Web
-доступ к репозитарию:
Работает. Т.е. я создал проект в Redmine
, указал для него используемое хранилище кода, создал сам репозитарий и достук к нему возможен только у авторизованных учетных данных указанных при создании проекта.
Шаг №4: Вот только это все в ручную, хотелось бы чтобы при создании проекта репозитарий создавался автоматически, разберу сейчас:
http://IP&DNS — user&pass — Администрирование — Настройки — Хранилища
Автоматически следить за изменениями хранилища: отмечаю галочкой
Включить веб-сервис для управления хранилищем: отмечаю галочкой
нажимаю «Сгенерировать ключ
» и напротив настройки
API ключ: появится сгенерированный ключ: 2ziknMZ8XHv5twS4OczR
Разрешить ссылаться и исправлять задачи во всех остальных проектах: отмечаю галочкой
Включить учет времени: отмечаю галочкой
и нажимаю «Сохранить
»
На заметку: Когда включили веб-сервис следует внести изменения в hg.conf
#Enable Web Service <Location /sys> Order deny,allow Allow from 172.33.33.2 Deny from all </Location> ekzorchik@srv-bionic:~$ sudo systemctl restart apache2 && sudo systemctl status apache2 | head -n5 ekzorchik@srv-bionic:~$ sudo nano /usr/share/redmine/extra/svn/reposman.rb #после Module SCM добавляю module SCM module Mercurial def self.create(path) Dir.mkdir path Dir.chdir(path) do system_or_raise "hg init" end end end
После не забываем сохранить внесенные изменения.
Узнаю синтаксис: /usr/share/redmine/extra/svn/reposman.rb —help
Пробую сперва запустить чтобы строка отработала:
ekzorchik@srv-bionic:~$ ruby /usr/share/redmine/extra/svn/reposman.rb --redmine-host localhost --scm Mercurial --svn-dir /var/www/html/hg --owner www-data --url http://172.33.33.2/hg/ --key 2ziknMZ8XHv5twS4OczR --verbose >> /tmp/repostman.log Traceback (most recent call last): 24: from /usr/share/redmine/extra/svn/reposman.rb:170:in `<main>' 23: from /usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:70:in `require' 22: from /usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:70:in `require'
Шаг №5: Создадим задание на запуск скрипта каждую минуту тем самым проверяя если есть новый проект, а под него предопределено хранилище то его нужно создать:
ekzorchik@srv-bionic:~$ sudo nano /etc/cron.d/redmine * * * * * root ruby /usr/share/redmine/extra/svn/reposman.rb --redmine localhost/redmine --scm Mercurial --svn-dir /var/www/html/hg/repos --owner www-data --url /var/www/html/hg/repos --key=2ziknMZ8XHv5twS4OczR >> /var/log/reposman.log
Проверяю, как создастся репозитарий если я создам проект и предопределю для него репозитарий Mercurial
:
Смотрю логи, и вижу что чего-то не хватает, устанавливаю:
ekzorchik@srv-bionic:~$ sudo tail -f /var/log/reposman.log This script requires activeresource. Run 'gem install activeresource' to install it. ekzorchik@srv-bionic:~$ dpkg -l | grep redmine ii redmine 3.4.4-1 ekzorchik@srv-bionic:~$ sudo gem uninstall activeresource Successfully uninstalled activeresource-5.1.0 ekzorchik@srv-bionic:~$ sudo gem install activeresource -v 3.2.22.1
вот с этой версией 3.2.22.1
все заработало.
ekzorchik@srv-bionic:~$ ruby /usr/share/redmine/extra/svn/reposman.rb --redmine-host 172.33.33.2 --scm Mercurial --svn-dir /var/www/html/hg --owner www-data -group www-data --url http://172.33.33.2/hg/ --key cRkfajVZi90WNDuTRx16 --verbose querying Redmine for active projects with repository module enabled... retrieved 3 projects processing project example (example) processing project test (test) repository for project test already exists in Redmine processing project tost (tost) repository for project tost already exists in Redmine
Правильная строчка: от 08.05.2019
ekzorchik@srv-bionic:~$ sudo nano /etc/cron.d/redmine * * * * * root ruby /usr/share/redmine/extra/svn/reposman.rb --redmine-host 172.33.33.2 --scm Mercurial --svn-dir /var/www/html/hg --owner www-data --group www-data --url http://172.33.33.2/hg/ --key cRkfajVZi90WNDuTRx16 --verbose >> /var/log/reposman.log
Шаг №6: Как работает создание репозитария для проекта:
http://IP&DNS — user&pass (admin&712mbddr@) - Проекты — Новый проекта
Имя: aka_ekzorchik
Уникальный идентификатор: aka_ekzorchik
и нажимаю «Создать
» , затем перехожу в «Участники
» – «Новый участник
» , отмечаю группу «Redmine Admin
» и отмечаю обязательные роли «Manager, Developer
» и нажимаю «Добавить
». Переходить в настройку «Хранилища
» не нужно. Скрипт сам создаст репозитарий, в файле журнала будет
ekzorchik@srv-bionic:~$ sudo tail -f /var/log/reposman.log processing project aka_ekzorchik (aka_ekzorchik) repository /var/www/html/hg/aka_ekzorchik created repository /var/www/html/hg/aka_ekzorchik registered in Redmine with url http://172.33.33.2/hg/aka_ekzorchik ekzorchik@srv-bionic:~$ ls /var/www/html/hg/aka_ekzorchik/ -al total 12 drwxrwxr-x 3 www-data www-data 4096 May 8 23:02 . drwxr-xr-x 8 root root 4096 May 8 23:02 .. drwxrwxr-x 3 www-data www-data 4096 May 8 23:02 .hg
Также и доступ в Mercurial
репозитарий через Web
-интерфейс
Отлично работает. От 08.05.2019
. Чего я добился выше указанными действиями, при использовании Redmine, когда создается проект в автоматическом режиме создается репозитарий по имени проекта, также можно через Web
-интерфейс зайти в созданный репозитарий проекта. На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.