Эпиграф


“Если бы губы Никанора Ивановича да приставить к носу Ивана Кузьмича, да взять сколько-нибудь развязности, какая у Балтазара Балтазарыча, да, пожалуй, прибавить к этому еще дородности Ивана Павловича — я бы тогда тотчас же решилась.» Н.В. Гоголь. Женитьба.



Есть два всем известных и очень разных инструмента управления проектами: MS Project и Redmine. Каждый из них имеет свои достоинства, и эти достоинства могли бы друг друга прекрасно дополнить.


Хочу предложить вашему вниманию небольшую утилиту под названием P2R, позволяющую без всякой инсталляции и с минимумом настроек обеспечить online синхронизацию проектов в MS Project и Redmine. Она доступна по адресу.


Чем хорош Project:


  • Удобно редактировать проект в целом в режиме документа – электронной таблицы. Также плюс, что несколько проектов можно быстро объединить в сводный и посмотреть в целом. (В Redmine задачи проекта редактируются только по одной через форму задачи).
  • Всевозможное разнообразие и гибкость связей между задачами (в Redmine связи реализованы минималистично).
  • Контроль загрузки ресурсов и возможность автоматического распределения задач по календарю с учетом связей и загрузки ресурсов. В том числе и «нечеловеческих» ресурсов типа техники, помещений и т.п. (В Redmine ничего этого нет, инструмент создавался для другого.)

Чем хорош Redmine:


  • Свободный продукт на Ruby On Rails, достаточно простой, хорошо настраиваемый и расширяемый, с активным сообществом, большим выбором плагинов, активно развиваемый
  • Web и коллективная работа. Как следствие очень удобно фиксировать ход работ по каждой задаче, включая журнал изменений, переписку и дискуссии по задаче, файлы, индивидуальные рапорты о затраченных часах и т. п. (В Project ничего этого нет.)

Было бы удобно готовить проекты в MS Project, отсылать их на исполнение в Redmine, получать оттуда фактические сроки задач и оцененные/потраченные часы, сопоставлять их с заранее сохраненными baseline, внося корректировки, если надо. (Особенно удобно, к примеру, в ситуации, как у нас на работе: есть поток проектов с регулярной структурой, которые надо формировать по шаблонам, слегка конкретизировать и отдавать в работу.)


Есть плагины Rredmine для такой интеграции. Но они делают интеграцию через выгрузку-загрузку xml-файлов, а хочется без файлов и попроще.


Предлагаемый скрипт P2R написан на ruby и работает с MS Project через OLE, а с Redfmine по API. Если не установлен ruby, можно взять тот же скрипт, скомпилированный в .exe (лежит в папке downloads, сформирован утилитой ocra).


Подготовка проекта MSP для публикации и синхронизации требует минимума действий.


  1. P2R хранит идентификаторы задач Redmine в атрибуте «Гиперссылка» (Hyperlink) задач MSP. Чтобы пометить задачу для публикации, нужно поместить 0 в этот атрибут. После публикации P2R автоматически изменит это поле на реальный ID задачи и заодно сформирует правильный URL в атрибуте «АдресГиперссылки» (HyperlinkAddress), так что ссылка будет кликабельной. (Понятное дело, проект MSP потом надо не забыть сохранить, автоматически не сохраняется.)
  2. P2R хранит идентификаторы пользователей Redmine также в атрибуте «Гиперссылка» (Hyperlink) ресурсов MSP. Чтобы связать данный ресурс c пользователем Redmine, надо узнать ID пользователя у админа Redmine. (Админ имеет доступ к списку пользователей и может посмотреть их ID, например в ссылках в списке).
  3. P2R берет параметры доступа в Redmine из специальной задачи с именем “Redmine Synchronization”. Такую задачу надо создать и поместить параметры доступа в поле «Заметки» (Notes) в формате YAML согласно образцу (значения параметров, понятное дело, надо заменить на свои):

    redmine_host: 192.168.10.10
    redmine_port: 3000
    redmine_api_key: a21e583e7670b1fc79378441d485b9608e4c2dc4c
    redmine_project_uuid: test
    task_default_redmine_tracker_id: 4
    resource_default_redmine_role_id: 4

После этого проект готов к синхронизации. Назначение параметров понятно из их названий.


Параметр redmine_project_uuid содержит уникальный код проекта, который нужно придумать в соответствии с правилами Redmine, которые можно найти через страницу настройки любого проекта. Если при создании проекта возникнет ошибка «Unprocessable Entry», скорее всего, вы выбрали некорректный uuid проекта.


Параметр task_default_redmine_tracker_id необязателен. Если его опустить, будет проставлен трек по умолчанию из настроек Redmine.


Если вы хотите не создавать в Redmine новый проект, а подключить существующий, сделайте следующее:


  1. Добавьте в настройки Redmine Synchronization параметр redmine_project_id и поставьте туда ID проекта Redmine Это не uuid! Это целое число – ID записи в базе Redmine. Найти этот ID можно, напрмер, в карточке проекта в формате XML или JSON (для вышеуказанного примера ее можно получить по адресу http://192.168.10.10:3000/projects/test.json).
  2. В задачи, подлежащие синхронизации с уже существующими в Redmine, поставьте в поле Гиперссылка не нули, а их реальные Redmine ID.

Есть небольшое ограничение с назначением ресурсов задаче:


  • Поскольку в Redmine можно назначить задаче только одного исполнителя, скрипт будет ругаться и останавливаться, обнаружив в задаче MSP больше одного ресурса, помеченного для синхронизации. (1) Возможно, в следующих версиях такое поведение будет заменено на более щадящее, типа выдачи предупреждения и случайного выбора одного из. (2) Ресурсов, которые не синхронизируются, можно назначить сколько угодно, P2R их игнорирует.

Реализован следующий алгоритм синхронизации:


  • Название задачи, структура подчинения и ответственный имеют приоритет на стороне MSP, т.е. их нужно править в MS Project, а изменения уйдут в Redmine при синхронизации.
  • Начало задачи, конец, трудозатраты (оценка и фактические) имеют приоритет на стороне Redmine и при синхронизации уходят в MSP.

С трудозатратами тоже есть проблема: в MSP оценка трудозатрат, фактические трудозатраты и процент исполнения жестко связаны формулой, в то время как в Redmine задаются независимо. То есть оценили в 10 часов, потратили 40 часов и при этом завершили задачу на 30%. В жизни так бывает, и Redmine не возражает. Решение выбрано такое:


  • Фактические затраты пишем всегда как есть
  • Если фактические затраты больше оценки и процент завершения 0, игнорируем оценку
  • Если фактические затраты больше оценки и процент завершения не 0, вычисляем новую оценку по факту и проценту завершения.

Итого, процесс синхронизации выглядит так:


  1. Открываем наш проект в MS Project и оставляем активным.
  2. Если хотим, запускаем холостой прогон P2R и смотрим, какие будут изменения.
  3. Запускаем фактическую синхронизацию: c ключом –e.

Рабочая директория, из которой запускается скрипт, значения не имеет.


Можно сделать запуск скрипта по таймеру, и синхронизация станет вовсе автоматической.


Благодарю за внимание.

Комментарии (0)