Постепенно приходим к пониманию нужен или нет у нас code review. Ради эксперимента решили поставить
ReviewBoard. ну типа бисплатный, умеет свн и красяво. И девиз красивый -Take the pain out of code review
Ога. Только you will take pain of configure it.
ну вообщем до конца завести ревьюборд мне пока не удалось.
Тут описан штатный процесс конфигурации -
https://www.reviewboard.org/docs/manual/dev/admin/installation/linux/А, да, решение под винды они штатно уже не поддерживают. И я кажется понял почему, но об этом ниже.
Установка довольно стандартная - sudo apt-get install чегой нить, (я на убунту сервер ставил) и до пункта After installation я дошел без сюрпризов.
Первая тонкость - что при установке борды на mysql он требует чтобы база была уже создана. Сам создавать с заданным именем не умеет.
Вторая (которая меня уже побольше зацепила) - что когда в процессе конфигурации указываешь имя сайта - это именно то имя, по которому сайт на джанге (а ревью борд написана на джанге) должен отвечать. Т.е. к примеру, машина сама у меня имеет имя OSUB-CODE-REVIEW, и ip 192.168.42.11. значит в конфигураторе борды надо указывать 192.168.42.11, потому что моя убунта на запрос
http://osub-code-review не ответит, а на
http://192.168.42.11 ответит. Ежли указал не верно, то можно отредактировать в файле /var/www/reviewboard/conf/settings_local.py параметр ALLOWED_HOSTS = ['192.168.42.11']
Ок, после этого ревью боард завелся, ответил главной страничкой, я порадовался =) в принципе даже получилось создать новый ревью-реквест на основе последнего коммита из свн (реп настраивается через админку)
Следующей задачей было прикрутить к RevewBoard ldap. Для этого надо было питону устнановить еще один гем, (честно я не помню, то ли ReviewBoard сам говорит какой, то ли первые строчки гугла)
Как бы не сложно, но около часа я на это потратил, потому что неочевидно как именно вводить параметры в соответствующие поля.
Мы живем в домене hostco и у меня завелось вот так:
Authentification Method: LDAP
LDAP Server: ldap://192.168.31.3:389
LDAP Base DN: dc=hostco
Username Attribute: sAMAccoutnName
Review Board LDAP Bind Account Name: reviewuser
Review Board LDAP Bind password: password.
А мучился я потому, что сначала указал пользователя в форме hostco\reviewuser, и думал что остальные параметры влияют на то, что ниче не получается. Догадался убрать имя домена - заработало
Следующая задача - уже больше методологическая =) обеспечить наличие этих самых CodeReview requests. По идее, workflow предлагается следующий:
1. я беру код из свн
2. чо-та там кодю
3. делаю дифф между моим кодом и свн
4. на основе этого диффа делаю ревью-реквест
5. в случае аппрува - делаю коммит в свн.
тонких моментов тут несколько:
1. делать дифф ручками и создавать ревью реквест ручками - неудобно и лениво. Для этого есть утилита от Review Board - называется RBTools. ее минус в том, что она на питоне, и следовательно, большинству наших коллег нафиг не нужна, раз мы питон не используем. Другой вариант - есть плагины для еклипса или идеи - пока в проработке.
2. ждать пока все всё отревьювят - долго, а проект-менеджерам код в свн и версия нужны как всегда вчера.
3. Сам процесс ревью - только внедряется и еще не все понимают нужен ли он вообще.
Поэтому я workflow чуть поменял.
1. я беру код из свн
2. чота там кодю
3. делаю коммит
4. VisualSVN сам делает ревью реквест по моим изменениям и от моего имени
5. в случае необходимости изменения кода (я где-то наговнокодил, и меня натыкали носом) - делается новый коммит, цикл повторяется.
И для автоматизации я на VisualSVN повесил хук на Post-commit:
@esho off
c:
cd c:\svn_repo\test
svn update --username mySVNUser --password mySVNPass --force --accept theirs-full --no-auth-cache --non-interactive --trust-server-cert >> post_commit.log
java -jar c:\java-svn\java-svn-1.0-SNAPSHOT.jar -ss
https://oursvnserver/svn/test -us mySVNUser -ps mySVNPass -ur myReviewUser -pr myReviewPass >> post_commit.log
и сделал маленькую
прогу на java Идея тут следующая:
Так, как RBTools умеет сам делать ревью реквест из командной строки, то этим и надо пользоваться. Но RBTools не умеют напрямую ходить в свн-сервер и запрашивать инфу о пользователе, о коммит-комментарии и т.д. Поэтому делается следующим образом:
1. в каталоге на свн-сервере делается svn-update проекта в каталог отличный от репозитория, чтобы получить последний коммит проекта, который сделали только что.
2.
Маленькая прога на java идет на сервер SVN, получает оттуда всю инфу, и с нужными параметрами запускает RBTools для создания ревью реквеста.
Тонкости следующие:
1. На сервере с VisualSVN требуется питон 2.7 для RBTools
2. Требуется добавление РБТулсов в PATH
3. САМОЕ ГЛАВНОЕ! Я это пока не понял как чинить! надо разобраться от чьего имени запускается VisualSVN, его хук и соответственно моя прога и РБТулс. Почему то у некоторых пользователей WIndows во время выполнения команды svn update несмотря на указанный пароль и параметр --non-interactive СВН все равно запрашивал пароль.
Проверил я это только запуская консольку от имени этого же пользователя и проверя выполнение команд.
Что бы я еще хотел?
1. Парсинг коммита на предмет файлов с исходным кодом и добавления ревью-реквеста только к ним. Потому что документы у нас тоже лежат в СВН
2. Парсинг текста комментария коммита, чтобы можно было указать, что это коммит-исправление к уже имевшемуся коммиту и ревью-реквесту № ндцать.
ну а в целом, оно пока что у меня работает. что будет дальше - видно будет =)))
ну и 2 КПДВ чо в итоге получилось: