- PVSM.RU - https://www.pvsm.ru -
Сегодня расскажем, как автоматизировать создание отчетной документации по релизу (release notes) на основе импорта данных из трекинговых систем TFS, Redmine и JIRA и из системы управления проектами Microsoft Project Server.
Статья будет интересна в первую очередь менеджерам IT-проектов.
Главными проблемами были ошибки и разнобой в оформлении release notes. Это сопроводительный документ, который мы отправляем заказчику вместе с очередным релизом. Release notes должен быть точным, как инструкция по запуску космического корабля. Каждый относящийся к релизу багфикс, каждая закрытая user story и вся информация по user feedback должны быть четко отражены в отчете. Составлялся этот большой и важный документ вручную, копипастом из трекинговых программ. Вот тут-то и возникали проблемы.
При ручном составлении отчета иногда возникали ошибки. Некоторые наши проекты очень объемны и по технологическим причинам ведутся сразу в двух трекерах (например, часть проекта по созданию мобильного приложения ведется в Redmine, а по созданию веб-приложения – в TFS). Собирать по ним огромный отчет – долго и человеческий фактор мешал сделать все отчеты на 100% верифицированными.
Кто-то из менеджеров проектов писал подробные комментарии к релизу, кто-то отправлял просто список работ. Красота оформления тоже страдала, поскольку release notes выглядел как обычное электронное письмо, хотя это одно из самых важных писем, которое приходит заказчику.
Постепенно мы пришли к пониманию того, что создание отчетов по релизам нужно автоматизировать.
На нашем внутреннем портале появился веб-конструктор, который позволяет в несколько кликов собрать готовый отчет по релизу. Логинишься в приложение, выбираешь проект, релиз, нужные user story и таски, нажимаешь кнопочку – и остается только при необходимости дописать комментарии. По отзывам проджектов, эти простые действия приносят стойкое ощущение счастья.
Конструктор интегрирован с таск-трекерами и автоматически подтягивает в готовый release notes всю информацию по релизу. На выходе приложение генерирует красиво сверстанный e-mail отчет для заказчика. В нем вся информация разбита по категориям и каждый пункт снабжен ссылкой, ведущей на соответствующую страницу в трекере.
В первый отправленный боевой отчет о выпущенном релизе вошло около 50 user story. В ворде такой документ занял бы 11 страниц. А на его создание в приложении ушло всего около 2 минут. Но главное не в экономии времени, а в том, что мы уверены в точности данных.
Прежде чем делать свое решение для автоматизации, мы поискали готовые варианты. Теоретически для автоматизации составления release notes можно было использовать плагины к трекерам, в которых мы работаем (TFS, Redmine и JIRA). Но плагины у TFS и Redmine оказались неудобными. А для сборки единого отчета сразу из двух или трех трекеров вообще не нашлось готового решения. Поэтому нам пришлось сделать свое.
По технологическим причинам наши проекты ведутся в трех трекерах (TFS, JIRA, Redmine) и стандарты ведения проектов в них немного отличались. Для интеграции трекеров пришлось провести работу по внедрению единых стандартов для всех трекеров.
Кроме того, понадобилось также причесать те блоки информации в трекерах, которые непосредственно экспортируются в release notes. Проект должен быть разбит по релизам, релизы поделены на задачи и у них проставлены статусы, все user story правильно описаны и закрыты, все задачи по фидбэку классифицированы, заведены все спринты. Кроме того, всем задачам и релизам должны быть даны понятные названия, ведь они потом войдут в отчет для заказчика
Мы построили представления над базами данных наших трекинговых систем (TFS, Redmine и JIRA), также подтянули некоторые данные из Microsoft Project Server (например, данные о заказчике). При этом нам пришлось решить некоторые проблемы с интеграцией данных из трекеров. Например, для каждого трекера пришлось найти индивидуальное решение проблемы с авторизацией для получения данных. Подробно об этом мы уже писали [1].
Для сбора данных мы использовали SQL Server Integration Services (SSIS) [2].
Данные из трёх трекинговых систем (TFS, Redmine, JIRA) и Microsoft Project собираются в единое хранилище данных Data Warehouse.
Сначала загружаем данные из Microsoft Project.
SELECT proj.PROJ_NAME AS ProjectName
,proj.PROJ_UID as ProjectUID
,CT.Customer
,PCC.CostCenter
,PP.ProjectAccount
,pr_owner.RES_NAME AS ProjectOwner
,pr_owner.RES_UID as OwnerResourceNameUID
,CASE WHEN PPS.ProjectStatus IS NULL THEN 'Undefined' ELSE PPS.ProjectStatus END AS ProjectStatus
FROM (SELECT PROJ_UID
,PROJ_NAME
,WRES_UID
FROM pub.MSP_PROJECTS
UNION SELECT 'E38038FA-F8CA-47D1-BFD4-6B45B8462972' AS Expr1
,'Administrative' AS Expr2, NULL AS Expr3) AS proj
LEFT OUTER JOIN pub.MSP_RESOURCES AS pr_owner ON pr_owner.RES_UID = proj.WRES_UID
LEFT OUTER JOIN
(SELECT pspPrjCFV.PROJ_UID
,psLV.LT_VALUE_TEXT AS Customer
FROM ProjectWebApp_PSWA.pub.MSP_PROJ_CUSTOM_FIELD_VALUES AS pspPrjCFV
INNER JOIN ProjectWebApp_PSWA.pub.MSP_CUSTOM_FIELDS AS pspCF ON pspCF.MD_PROP_UID = pspPrjCFV.MD_PROP_UID
LEFT JOIN ProjectWebApp_PSWA.pub.MSP_LOOKUP_TABLE_VALUES AS psLV ON psLV.LT_STRUCT_UID = pspPrjCFV.CODE_VALUE
WHERE (pspCF.MD_PROP_NAME = 'Customer')
) AS CT ON CT.PROJ_UID = proj.PROJ_UID
LEFT OUTER JOIN
(SELECT pspPrjCFV.PROJ_UID, psLV.LT_VALUE_TEXT AS CostCenter
FROM pub.MSP_PROJ_CUSTOM_FIELD_VALUES AS pspPrjCFV
INNER JOIN pub.MSP_CUSTOM_FIELDS AS pspCF ON pspPrjCFV.MD_PROP_UID = pspCF.MD_PROP_UID
LEFT OUTER JOIN pub.MSP_LOOKUP_TABLE_VALUES AS psLV ON psLV.LT_STRUCT_UID = pspPrjCFV.CODE_VALUE
WHERE (pspCF.MD_PROP_NAME = 'Cost_Center')
) AS PCC ON PCC.PROJ_UID = proj.PROJ_UID
LEFT OUTER JOIN
(SELECT pspPrjCFV.PROJ_UID, pspPrjCFV.TEXT_VALUE AS ProjectAccount
FROM pub.MSP_PROJ_CUSTOM_FIELD_VALUES AS pspPrjCFV
INNER JOIN pub.MSP_CUSTOM_FIELDS AS pspCF
ON pspPrjCFV.MD_PROP_UID = pspCF.MD_PROP_UID
WHERE (pspCF.MD_PROP_NAME = 'Project Account')
) AS PP ON PP.PROJ_UID = proj.PROJ_UID
LEFT OUTER JOIN
(SELECT pspPrjCFV.PROJ_UID, psLV.LT_VALUE_TEXT AS ProjectStatus
FROM pub.MSP_PROJ_CUSTOM_FIELD_VALUES AS pspPrjCFV
INNER JOIN pub.MSP_CUSTOM_FIELDS AS pspCF ON pspPrjCFV.MD_PROP_UID = pspCF.MD_PROP_UID
LEFT OUTER JOIN pub.MSP_LOOKUP_TABLE_VALUES AS psLV
ON psLV.LT_STRUCT_UID = pspPrjCFV.CODE_VALUE
WHERE (pspCF.MD_PROP_NAME = 'Project Status')
) AS PPS ON PPS.PROJ_UID = proj.PROJ_UID
Далее, чтобы не заморачиваться с удалением старых данных, мы очищаем таблицы, связанные с задачами. И приступаем к сбору данных из трекинговых систем. Для каждой системы данные собираются по-своему. Как уже писалось в этой статье [1], для Redmine и TFS мы написали представления, которые возвращают нам все необходимые данные.
Так как доступа к базе JIRA у нас нет, то мы использовали JIRA REST APIi. Как вы сами понимаете, это самая медленная часть скрипта и куча возможностей для оптимизации. Но это уже отдельная история.
После загрузки данных из трекеров нужно заполнить «пробелы» в таблицах проектов и сотрудников. Эти пробелы возникают в связи с тем, что не все проекты и сотрудники заведены в Microsoft Project в силу каких-то обстоятельств (либо не успели завести, либо исторически так сложилось). Отсутствующие данные сразу видны в отчете из OLAP куб, они помечены в отдельном столбце как Mismatch, и их можно сразу же обработать и навести порядок.
Далее осталось собрать всё воедино. Собираем вместе список задач.
И заполняем таблицу фактов (кто, куда и сколько потратил времени).
После чего мы запилили Job, который выполняет SSIS пакет раз в 3 минуты. И в итоге наш Data Warehouse готов. Далее с ним можно делать кучу полезных вещей. Например, собрать из него OLAP-куб для построения отчётов, или взять данные для Release Notes, или использовать для построения графика отпусков (да, да, про это тоже скоро расскажем).
Тут все просто: дизайнер и верстальщик сделали html-файл, в котором вся информация разбита по категориям, добавлены все необходимые ссылки.
Первые же письма вызвали восторженную реакцию заказчиков, и они попросили нас адаптировать шаблон под их бренд-буки и дать возможность самостоятельно редактировать наш release notes, сортируя информацию и добавляя комментарии для отправки новым адресатам.
А мы думаем, какие трудозатраты и бизнес-процессы еще оптимизировать...
Автор: EastBanc Technologies
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/upravlenie-proektami/252395
Ссылки в тексте:
[1] мы уже писали: https://habrahabr.ru/company/eastbanctech/blog/321540/
[2] SQL Server Integration Services (SSIS): https://docs.microsoft.com/en-us/sql/integration-services/ssis-designer
[3] Источник: https://habrahabr.ru/post/326178/
Нажмите здесь для печати.