Задача: Проработать шаги по настройке связки 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.
1 |
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
интерфейс, в основе шаги из заметки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
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
и инициализирую:
1 2 3 4 5 6 7 8 9 10 11 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#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
Пробую сперва запустить чтобы строка отработала:
1 2 3 4 5 6 7 8 9 |
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: Создадим задание на запуск скрипта каждую минуту тем самым проверяя если есть новый проект, а под него предопределено хранилище то его нужно создать:
1 2 3 |
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
:
Смотрю логи, и вижу что чего-то не хватает, устанавливаю:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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
все заработало.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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
1 2 3 |
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
» и нажимаю «Добавить
». Переходить в настройку «Хранилища
» не нужно. Скрипт сам создаст репозитарий, в файле журнала будет
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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.