Жизненный цикл задач в Redmine для небольшой группы разработки. Наш опыт и полезные советы

Redmine
Redmine_logo.png
Создатели: Jean-Philippe Lang
Постоянный выпуск: 3.3.2
Написана на: Ruby
Операционная система: Кросс-платформенноевеб-приложение
Лицензия: GNU GPL
Веб-сайт

Redmine — бесплатное и имеющее открытый исходный код веб-приложение, которое используется для управления версиями и поиска ошибок. Оно позволяет пользователям управлять множеством проектов и подпроектов. Для каждого проекта приложение позволяет создать свое описание, форум, контроль времени и несколько уровней доступа. Redmine также включает в себя календарь и диаграмму Гантта, позволяющие визуализировать процесс разработки проектов и их дедлайны. Также приложение включает в себя системы контроля версий и diff viewer (утилита, показывающая разницу между несколькими версиями одного и того же проекта).

Внешний вид Redmine похож на Trac, приложение, обладающее похожими функциями.

Redmine написан на Ruby on Rails. Приложение является кросс-платформенным и поддерживает 34 языка.

Возможности

Redmine предоставляет следующие возможности:

  • ведение нескольких проектов;
  • гибкая система доступа, основанная на ролях;
  • система отслеживания ошибок;
  • диаграммы Ганта и календарь;
  • ведение новостей проекта, документов и управление файлами;
  • оповещение об изменениях с помощью RSS-потоков и электронной почты;
  • вики для каждого проекта;
  • форумы для каждого проекта;
  • учёт временных затрат;
  • настраиваемые произвольные поля для инцидентов, временных затрат, проектов и пользователей;
  • лёгкая интеграция с системами управления версиями (SVN, CVS, Git, Mercurial, Bazaar и Darcs);
  • создание записей об ошибках на основе полученных писем;
  • поддержка множественной аутентификации LDAP;
  • возможность самостоятельной регистрации новых пользователей;
  • многоязычный интерфейс (в том числе русский);
  • поддержка СУБД MySQL, Microsoft SQL Server, PostgreSQL, SQLite, Oracle.

Распространение

По данным разработчика Redmine, веб-приложение используют более 80 известных компаний. Среди пользователей Redmine есть и Ruby. Redmine является самым популярным планировщиком с открытым кодом.

Структура

Пользователи системы

Пользователи являются одним из центральных понятий предметной области. Модель пользователя является основой для идентификации и аутентификации работающего с системой персонала и клиентов, а также для авторизации их в разных ролях, проектах и т. п.

Роли

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

Пользователям назначается роль в каждом проекте, в котором он участвует, например, «менеджер в проекте по разработке сайта А», «разработчик в проекте по поддержанию интранета компании» или «клиент в проекте по рефакторингу информационной системы компании Б». Пользователь может иметь несколько ролей. Назначение роли для отдельной задачи (issue) в данный момент невозможно.

Проекты

Проект является одним из основных понятий в предметной области систем управления проектами. Благодаря этой сущности возможно организовать совместную работу и планирование нескольких проектов одновременно с разграничением доступа различным пользователям (см. выше). Проекты допускают иерархическую вложенность.

Трекеры

Трекеры являются основной классификацией, по которой сортируются задачи в проекте. Само по себе понятие «трекер» восходит к системам учёта ошибок (англ. Bug tracking tool), представлявшим каждая в отдельности один проект.

По сути, в «Redmine» трекеры представляют собой аналог подклассов класса «Задача» и являются основой для полиморфизма разного рода задач, позволяя определять для каждого их типа различные поля. Примерами трекеров являются «Улучшение», «Ошибка», «Документирование», «Поддержка»,

Задачи

Задачи являются центральным понятием всей системы, описывающим некую задачу, которую необходимо выполнить. У каждой задачи в обязательном порядке есть описание и автор, в обязательном порядке задача привязана к трекеру.

Каждая задача имеет статус. Статусы представляют собой отдельную сущность с возможностью определения прав на назначение статуса для различных ролей (например, статус «отклонен» может присвоить только менеджер) или определение актуальности задачи (например, «открыт», «назначен» — актуальные, а «закрыт», «отклонен» — нет).

Для каждого проекта отдельно определяются набор этапов разработки и набор категорий задач. Среди других полей интересны также «оцененное время», служащее основой для построения управленческих диаграмм, а также поле выбора наблюдателей за задачей (см. «Получение уведомлений»). К задачам имеется возможность прикреплять файлы (имеется отдельная сущность «Приложение»).

Значения других перечислимых свойств (например, приоритетность) хранятся в отдельной общей таблице.

Отслеживание изменения параметров задач

За отслеживание изменений параметров задач пользователями в системе отвечают две сущности: «Запись журнала изменений» и «Измененный параметр». Запись журнала отображает одно действие пользователя по редактированию параметров задачи и/или добавление комментария к ней. То есть служит одновременно инструментом ведения истории задачи и инструментом ведения диалога.

Сущность «Измененный параметр» привязана к отдельной записи журнала и предназначена для хранения старого и нового значения измененного пользователем параметра.

Связи между задачами

Задачи могут быть взаимосвязаны: например, одна задача является подзадачей для другой или предшествовать ей. Эта информация может быть полезна в ходе планирования разработки программы, за её хранение в Redmine отвечает отдельная сущность.

Учёт затраченного на проект времени

Система поддерживает учёт затраченного времени благодаря сущности «Затраченное время», связанной с пользователями и задачей. Сущность позволяет хранить затраченное время, вид деятельности пользователя (разработка, проектирование, поддержка) и краткий комментарий к работе. Эти данные могут быть использованы, например, для анализа вклада каждого участника в проект или для оценки фактической трудоемкости и стоимости разработки.

Привязка репозиториев

Redmine предоставляет возможность интеграции с различными системами управления версиями (репозиториями). Интеграция заключается в отслеживании изменений во внешнем репозитории, их фиксации в базе данных, анализе изменений с целью их привязки к определенным задачам.

В инфологической структуре системы за интеграцию с внешними репозиториями отвечают три сущности: Репозиторий, Редакция и Изменение.

  • Репозиторий — связанная с проектом сущность, хранящая тип подключенного репозитория, его местонахождение и идентификационные данные его пользователя.
  • Редакция — отображение редакции репозитория, и, кроме информационных полей, может быть привязана к конкретной задаче: для этого требуется указать в описании изменений «refs #NUM», где NUM — номер задачи), и к пользователю-автору редакции.
  • Изменение — хранит список измененных (добавленных, удаленных, перемещенных, модифицированных) файлов в каждой редакции.

Получение уведомлений

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

Некоторые недостатки Redmine

  • Управление файлами и документами в Redmine сводится к их добавлению, удалению и редактированию. Правами доступа ни к файлам, ни к отдельным документам управлять нельзя.
  • В Redmine нельзя управлять правами доступа на уровне отдельных полей задачи. Например, на данный момент от клиентов нельзя скрыть оценки времени работы над задачей. Но можно сделать дополнительные поля видимыми только пользователям с определёнными ролями.
  • Нельзя скрыть внутреннюю переписку между программистами от клиента.
  • В Redmine в список задач не выводится общая трудоёмкость задач.
  • Нет возможности дать пользователю роль во всей системе; например, «Руководитель проектного офиса» должен иметь доступ ко всем проектам в системе: для этого нужно добавить пользователя с этой ролью во все проекты.
  • Подключить Git репозиторий возможно только в случае, если и Redmine, и репозиторий находятся на одном сервере.

Установка

Необходимые компоненты для установки Redmine

  • Ruby — среда разработки Ruby.
  • DevKit для Ruby — компонент разработчика для Ruby.
  • AddTrustExternalCARoot-2048.pem — сертификат безопасности для Ruby.
  • Redmine — последняя версия Redmine.
  • NSSM — сервис менеджер.

Шаг 1: Распаковка

  • Устанавливаем RubyInstaller в нужный нам каталог (например C:Ruby) и при установке ставим галочки:

«Add Ruby executables to your PATH» и «Associate .rb and .rbw files with this Ruby installation»

  • Распаковываем DevKit в C:RubyDevkit
  • Копируем сертификат в C:Rubylibruby2.1.0rubygemsssl_certs
  • Распаковываем Redmine в C:RubyRedmine
  • Распаковываем NSSM в папку Redmine C:RubyRedmineNSSM

Шаг 2: Установка devkit

  • Открываем консоль cmd от имени администратора.
  • Переходим в каталог Devkit:
    cd C:RubyDevkit
  • Выполняем команду инициализации Devkit:
    ruby dk.rb init
  • Выполняем команду установки Devkit:
    ruby dk.rb install

Шаг 3:Установка необходимых gem’ов

  • Устанавливаем менеджер для управления gem`ами:
gem install bundler
  • Устанавливаем sqlite3 для Ruby
gem install sqlite3-ruby
  • Обновляем все gem`ы и подтверждаем обновления:
gem update
  • Сворачиваем консоль.

Шаг 4: Настройка Redmine

  • В папке config (C:Rubyredmineconfig) открываем файл “database.yml.example”.
  • Удаляем все записи, кроме текста после SQLite3 configuration example. Удостоверьтесь, что символ решетки присутствует только в ПЕРВОЙ (SQLite3 configuration example) строке.
  • Сохраняем его уже в формате yml. (C:Rubyredmineconfigdatabase.yml)
  • В папке Redmine (C:Rubyredmine) открываем файл “Gemfile”.
  • Дописываем туда в начало: gem "sqlite3-ruby"

Шаг 5: Создание БД и первый запуск Redmine

  • Возвращаемся в консоль и переходим в папку с redmine:
cd C:Rubyredmine
  • Выполняем команду (установка зависимостей для Redmine):
bundle install --without development test rmagick
  • Выполняем команду (генерируем ключ для Rails):
rake generate_secret_token
  • Выполняем команду (создаем базу данных):
rake db:migrate RAILS_ENV="production"
  • Выполняем команду (устанавливаем конфигурацию по умолчанию):
rake redmine:load_default_data RAILS_ENV="production"
  • Запускаем сервер:
ruby bin/rails s -e "production"
  • Проверяем запуск сервера по адресу:

/localhost:3000/

Шаг 6: Создание сервиса для Redmine:

  • Создаем cmd файл:

del C:RubyRedmineservice.log

del C:RubyRedmineservice-err.log

set RAILS_ENV=production

cd C:RubyRedmine

C:Rubybinruby.exe -CC:RubyRedmine bin/rails server webrick -e production 1>> C:RubyRedmineservice.log 2>> C:RubyRedmineservice-err.log

  • Помещаем его в C:RubyRedmine
  • Переходим в консоль и переходим в папку NSSM:
cd C:RubyRedmineNSSM
  • Заходим в папку с разрядностью вашей системой, например:
cd win64
  • Создаем сервис:
nssm install Redmine
  • В открытом окне создания сервиса, в Path устанавливаем:
c:windowssystem32cmd.exe
  • В Arguments устанавливаем:
/c C:RubyRedminestart.cmd
  • Во вкладке «Details» устанавливаем Startup type: Automatic
  • Перезагружаем ПК (или просто включаем сервис руками) и пользуемся.

Ответвления

В результате разногласий в процессе разработки проекта, несколько разработчиков Redmine создали форк, названный Bluemine (вскоре название сменилось на ChiliProject). Его работа продолжалась до февраля 2015 года. В свою очередь, форк самого ChiliProject — OpenProject функционирует до сих пор.

См.также

logo.pngRedmine

В Redmine вся история нашей компании за 9 лет

Плюсы

“Мы начали создавать наши сервисы почти 9 лет назад. И сразу стали использовать таск-менеджеры. У нас несколько направлений работы в компании: разработка сервисов, техническая поддержка сервисов, управление продажами, PR и маркетинг. Для управления проектами мы активно используем Redmine. За годы работы там накопилось уже более 30 Гб данных — целая история. Можно детально просмотреть проекты, которые делали ещё 8 лет назад. Такой продукт хорош и полезен тем, что даже если кто-то работает вне офиса, или по другому графику, то в любой момент можно понять, кто и над какой задачей работает в данный момент и на какой стадии решения находится, какие возникают вопросы в процессе. Очень удобно реализован поиск, фильтрация, сортировка. Можно легко вносить корректировки в любой момент.

Минусы

Нужно настраивать, а некоторые функции требуют администратора. Но это всё нормально.

Будем пользоваться и дальше.

Так как я в работаю в коворкинге и часто обедаю с «соседними проектами», то знаю кто чем трекает задачи и проекты, как выбирают систему, почему переходят в облако и так далее. Поэтому я покажу, как можно использовать Redmine для решения актуальных и смежных с разработкой задач. Те из вас, кто хорошо знаком и уже используют Redmine для разработки, смогут увидеть преимущества от интеграции и использования дополнительных плагинов. Ну а для всех остальных — это обзор и, конечно, возможность увидеть Redmine в деле. В конце концов, это же самая популярная open-sourсe система управления проектами, пусть и с уклоном в разработку.

Содержание:

  1. Выбор темы для Redmine.
  2. Как использовать Redmine Agile командам?
  3. Управление клиентами и продажами в Redmine.
  4. Helpdesk или как автоматизировать поддержку клиентов в Redmine.
  5. Управление командой.
  6. Управление расходами в Redmine. Финансы.
  7. Redmine в облаке — сфокусируйтесь на проектах!

Разработка продукта, продажи, клиенты, поддержка, ресурсы, команда — как вы уже поняли, далее речь пойдет о том, как продуктовые команды или стартапы могут использовать Redmine для успешной реализации проектов.

1. Выбор темы для Redmine

Это для разогрева… Сколько времени вы проводите в таск менеджере? От того, как организовано ваше рабочее пространство, зависит ваша продуктивность, да и вообще настроение. «Тема» (оформление интерфейса) рабочей системы — это не просто “цвет поменяли”, это прежде всего удобство пользования.  Не знаю как вы, а я частенько встречаю нелестные отзывы об интерфейсе Redmine, а его создатели не торопятся презентовать новый концепт. Итак, вот как большинство пользователей привыкли видеть Redmine: А вот как выглядит та же страница с «другой» темой для Redmine:

Ну как вам? Разницу видите? Если нет, то обратить внимание на:

 

  • Акценты на главном (приоритезация). 
  • Правильно подобранные шрифты (читаемость).
  • Компоновка рабочего экрана (эргономика). 
  • Цветовая гамма (сочетание цветов).
  • Адаптивный дизайн (не видно на скриншоте, но видно на компе).
  • Поддержка ретина дисплеев (не видно на скриншоте, но видно на компе).

2. Как использовать Redmine Agile командам?

Менеджер в Москве, разработчики в Самаре, дизайнер в декрете работает из дома, маркетолог в Берлине, саппорт менеджер в Софии — вот реалии сегодняшнего дня. Собраться за кофе и обсудить проект, перетаскивая стикеры на доске, не всегда получается. Вы пробовали утренний stand-up митинг по Skype? С появлением новых методологий управления разработкой старый добрый Гант отошел на второй план. Миру нужен был новый визуальный образ, и он появился. Пользователям Redmine не пришлось долго ждать. Быстрые операции по добавлению задач, назначению ответственных, смена статуса задач прямо на доске (где видна картина в целом) стали реальностью. Вы можете разрабатывать продукты по гибкой методологии на Redmine. И, собственно, вот как это выглядит:Agile команды смогут в Redmine:

  • Планировать спринты.
  • Оценивать задачи (Story points).
  • Настраивать Agile-доски с помощью фильтров и сохранять их в виде запросов.
  • Устанавливать ограничение количества задача в конкретном статусе.
  • Остлеживать состояние проекта по Agile диаграммам — Burndown, Cumulative Flow, Velocity или Lead.
  • Персонифицировать доски под свои конкретные задачи.

Отслеживать текущее состояние по спринту можно на странице версии: Кому интересно подробнее, советую посмотреть весь функционал по Agile методикам в Redmine. Для наглядности приведу пример из текущего проекта. Пример из практики Отфильтровав по типу трекера, одну из досок я настроил таким образом, чтобы считывать и реагировать на новые тиккеты от клиентов (задачи в колонке «Not answered»). Я берусь за задачи, которые в работе, контролирую баги и отвечаю клиентам на саппорт тиккеты. По поводу обработки саппорт тиккетов мы поговорим чуть ниже в разделе «Helpdesk или как автоматизировать поддержку клиентов». Цвет задачи указывает на категорию задач, и когда недельный спринт направлен на проверку гипотезы рекламного канала, все задачи, связанные с рекламой, видны и ждут меня. Текущие баги выделены красным цветом, что является дополнительным раздражителем именно для меня. Вуаля! моя доска на этот проект готова!:

3. Управление клиентами и продажами в Redmine

Класический функционал CRM системы может быть полезен вам, если у вас есть клиенты или внешние контакты. Это мой любимый модуль сразу по двум причинам. Во-первых, для меня клиент и особенно информация о нем выходит на первое место. Чем больше информации я о нем собираю и анализирую, тем больше у меня шансов продать продукт. Обращение в поддержку, скачивание бесплатной версии, заходы на сайт, участие в вебинаре, покупки — все это шаги моей воронки, и мне крайне важно отслеживать все эти касания. Ну а во-вторых, хоть это и e-commerce проект, мне все-таки нравится видеть, с кем имеешь дело (фото), когда ты знаешь, из какой он страны (часовой пояс), и всю историю отношений с ним. Приятнее, если хотите. Что вы можете делать в Redmine с помощью модуля CRM:

  • Вести базу данных клиентов, партнеров и контрагентов.
  • Видеть историю общения с клиентом.
  • Привязывать задачу к клиенту.
  • Отправлять сообщения по email.
  • Организовать клиентский портал.
  • Драйвить сделки с клиентами.
  • Быстро находить контакты с помощью тегов и фильтров.

Стоит отметить, что благодаря настройкам доступа пользователей, вы можете организовать настоящий личный кабинет для ваших клиентов, где они смогут скачивать продукты, оплачивать лицензии (интеграция с платежным шлюзом). Пожалуй, это тоже отдельная история, и про интернет магазин внутри Redmine лучше поговорим в следующий раз. Пример из практики Чтобы найти узкое место на этапе пользования бесплатной версией, мне пришлось добавить точки касания с клиентом, анализировать поведение внутри триала и фиксировать обратную связь по каждому клиенту. Мы добавили новые этапы взаимодействия с клиентом: онлайн презентация и обучающий тренинг и стали анализировать. Параллельно нужно было вести текущих клиентов, выявлять собирательный образ и улучшать ценностное предложение. В итоге я настроил для каждого типа клиентов свои «доски» и организовал работу как с лидами, так и текущими клиентами. С помощью фильтров я выстроил нужные мне отчеты и по ответственным исполнителям я мог видеть кто как работает, а визуализация воронки по стадиям продаж давала мне пищу для размышления. В итоге мне удалось организовать работу сразу пятерых сотрудников, выявить и ликвидировать узкое место (миграция данных из других систем) и, как следствие, повысить средний чек и доход.

4. Helpdesk или как автоматизировать поддержку клиентов в Redmine

Ну а коль уж вы имеете дело с клиентами, то и обращения от них вам нужно обрабатывать! И если поначалу вам удобнее просто отвечать из почтового клиента, то по мере увеличения писем вам придется превратить обращения в тиккеты и организовать работу с ними. Каждое обращение от клиента имеет свой статус, автора (контакт), ответственного исполнителя. Все действия по обращению хранятся в истории, и всегда можно отследить, кто и что делал, в отличии от почтового клиента.

Чем вам может быть полезен Helpdesk в Redmine:

  • Helpdesk автоматом создаст тиккет из email клиента (или из контактной формы).
  • Заодно создаст и карточку контакта (если это новое обращение).
  • Вы сможете привязать задачу к контакту (история обращений по клиенту).
  • Сохраните время и отвечайте готовыми ответами (шаблоны ответов).
  • Организуйте уровни поддержки (SLA).
  • Отслеживайте метрики службы поддержки (время первого ответа и т.д.).
  • Попросите клиентов оценить работу саппорт менеджера (оценка менеджеров).
  • Настроить авто-ответы (указать ожидаемое время ответа или ссылку на FAQ).
  • Вы можете установить всплывающее окно и начать диалог с клиентом первыми (Pop-up форма обратной связи).

Пример из практики

Входящие тиккеты в Helpdesk модуле можно привязать как к клиенту, так и к сделке или задаче. По каждому клиенту можно отследить историю отношений. Сегментация пользователей внутри CRM ведется с помощью тегов, различных фильтров и кастомных полей.

Пришло обращение от клиента. По ссылке из письма-нотификации переходим на карточку клиента и видим: во-первых, этот клиент пробовал триал версию, во-вторых, у него есть скачанные бесплатные версии продукта, по нему ведется сделка ну и есть вся контактная информация. Не покидая карточки контакта, вы сможете ответить на его обращение, имея под рукой всю историю взаимоотношений с этим клиентом. Это важно для выстраивания персональных и доверительных отношений. Все мы любим внимание к своей персоне, и если вы упоминаете а-ля :«Я вижу, что вы в прошлом году попробовали нашу триал версию облачного решения, однако вам не хватило поддержки по миграции данных из Trello», то для клиента это будет звучать примерно так: «Вы для нас очень важный клиент, и мы все как один понимаем ответственность и очень хотим помочь вам и вашему бизнесу!» Даже если мы отвечаем на тиккет из своего почтового клиента, наше сообщение попадает в историю переписки с клиентом. Вы сможете быстро ответить с мобильного телефона и не терять при этом информацию.

5. Управление командой

Продуктовые команды состоят из людей разной квалификации, профессии, и далее по списку. Если у вас под рукой вся информация о предыдущем опыте работы, проектах и компетенциях — вы легко сможете подобрать нужного человека. Особенно актуально для удаленных команд и проектов, в которых часто прибегают к услугам фрилансеров. По каждому фрилансеру есть «карточка», в которой, по сути, хранится вся история взаимоотношений.

Вы сможете планировать отпуска и праздничные мероприятия, заранее предупреждая об этом всю команду проекта. Более того, вы можете оплачивать рабочие часы на основе затраченного времени по разным проектам и задачам. В конце концов, вы не забудете сделать сюрприз и поздравить человека с днем рождения.Пример из практики Итак, открываем список контактов (сотрудники) в Redmine и по тегу «Ux-Ui» смотрим потенциальных дизайнеров. Нам предстоит выбрать из 15 человек. Смотрим портфолио и последние работы на наличие IOS проектов — осталось 5. Отбрасываем капризных, и дизайнеров-хипстеров, потому как если их вариант не примут с первого раза — расстроятся и будут унывать. Отбрасываем тех, кто работает на фул тайме в компании, так как сроки не позволят работать по выходным и когда муза придет. У оставшихся 2-х кандидатов есть все шансы — отправляем им детали проекта и запрашиваем ценник. В итоге выбираем одного. По итогам работ на основании затраченного времени выставляем счет, который тут же можно отправить по почте.

6. Управление расходами в Redmine. Финансы

Не пугайтесь, тут не будет интеграции с 1С или другими системами. Я покажу, как можно вести простейшие операции по расходам и доходам внутри проекта. Давайте возьмем реальный кейс: у вас есть представительство в Москве, и на его содержание вы выделяете определенную сумму денег. У вас есть банковские карты, и вам нужно понимать состояние текущего счета — на что были потрачены деньги. Для этого в Redmine заводим счета, которые привязаны к банковской карте. Каждый раз, совершая ту или иную операцию, вы или ваш сотрудник указывает счет, сумму и категорию операции (заводится из справочника). После создания операции вам на почту приходит уведомление, и вы как менеджер можете подтвердить операцию или нет. Таким образом, у вас под рукой инструмент учета и мониторинга всех расходов по проекту.

7. Redmine в облаке — сфокусируйтесь на проектах!

Jira, Basecamp и другие лидеры рынка на базе своих продуктов создали облачные сервисы (Atlassian, Wrike) и взяли на себя вопросы, связанные c установкой, настройкой, поддержкой и обновлением ПО. Redmine сыскал славу прежде всего как гибкий инструмент! За его способность настройки под разные задачи его любят миллионы людей по всему миру. Так почему же не использовать это? Почему не доверить Redmine новые задачи? Тем более, что все эти модули появились в результате кропотливой, совместной работы с пользователями Redmine по всему миру. Именно так и появились SaaS решения для управления проектами и на базe Redmine. Я пользуюсь RedmineUP так как там есть необходимые мне модули, все готово к проектной работе и есть техподдержка, которой нет в бесплатном базовом Redmine. Так что самое время оглянуться и посмотреть на Redmine по-новому. Удачных проектов вам!Автор оригинала: Jens Krämer

  • Перевод

Дисклеймер: это не обычное руководство вида «Как установить Redmine». В нем я не буду погружаться в настройку базы данных или установку веб-сервера. Я также не буду рассказывать о настройке Redmine. Документация по Redmine в этом плане является достаточно полной. А для того, что не упоминается в официальной документации, есть общая процедура запуска Rails-приложений, которую можно легко найти в Интернете.

Вместо этого речь пойдет о сопровождении собственной, более или менее кастомизированной версии Redmine, которая может быть развернута с помощью одной команды оболочки, когда это необходимо.

Готовы? Тогда начнём.

Установочные пакеты Bitnami или предварительно установленные виртуальные машины хороши для быстрой пробы Redmine, но не подходят для продуктивного использования. Почему? Потому что у них нет обновления. Ой, секундочку, у Bitnami есть. Правда, оно больше похоже на шутку. «Установите новую версию всего стека в другой каталог и переместите туда свои данные» — это не обновление. Ни слова о настройке, кастомизации и плагинах, которые, вероятно, также нужно сохранить и переустановить. Желаю удачи с таким «обновлением».

Релизы патчей Redmine выходят один или два раза в месяц. Исправления ошибок, связанных с безопасностью, выпускаются по мере необходимости — вы же не хотите пропустить их?

Факт, о котором люди часто забывают: время обновления не всегда зависит от вас. Конечно, можно отложить обновление до выхода следующей младшей версии Redmine — на несколько недель (наверное, даже и на более длительный срок). Но вы же не хотите при обнаружении новых проблем безопасности в Redmine или Rails сидеть с непатченной системой, пока не получится освободить время для установки и настройки нового стека Bitnami и вручную переместить все данные?

Установка — это только верхушка айсберга. Обновление — вот что придется делать регулярно.

Поиск простейшего способа установки определенно перестает быть актуальным, как только принимается решение использовать Redmine в производстве. Простое сопровождение и возможность модернизации — вот на чем нужно заострять внимание, чтобы минимизировать затраты и риски, связанные с использованием собственного Redmine.

Ниже я расскажу, как просто поддерживать Redmine в актуальном состоянии.

Используйте Git

Даже если вы намереваетесь запустить стоковый Redmine без каких-либо настроек или плагинов, всё равно используйте репозиторий Git для хранения копии Redmine. По крайней мере, наличие специализированного репозитория даст вам место хранения всего необходимого для развертывания (позже это будет рассмотрено подробнее). Рано или поздно вы (или ваши пользователи) захотите установить какой-нибудь плагин или настраиваемую тему, и для этого уже будет готова инфраструктура. Эксперименты с изменениями и тестирование плагинов и тем в локальных ветвях без нарушений в производственном коде становятся очень простыми при наличии собственного репозитория git c Redmine. Так что сейчас мы начнем с настройки репозитория.

Хотя основной репозиторий Redmine является экземпляром Subversion, на Github есть полуофициальный репозиторий, который поддерживается основным коммиттером и постоянно обновляется. Используйте его для настройки собственного репозитория:

Настройка локального клона Redmine

$ git clone git@github.com:redmine/redmine.git $ cd redmine $ git remote rename origin upstream $ git remote add origin git@yourserver.com:redmine.git $ git checkout -b redmine/3.2-stable upstream/3.2-stable $ git checkout -b local/3.2-stable $ git push --set-upstream origin local/3.2-stable

Измените номер версии 3.2-stable на номер последней стабильной версии Redmine.

Удаленный репозиторий git@yourserver.com должен быть частным, так как в нем будет храниться конфигурация развертывания (а возможно, и прочая информация, публиковать которую не стоит). Поскольку описанный ниже процесс развертывания будет извлекать из этого репозитория код, то репозиторий должен быть доступен во время развертываний, поэтому не размещайте его на настольных компьютерах. Идеальной будет ситуация, когда репозиторий также будет доступен с веб-сервера, на котором происходит развертывание. Но это при необходимости можно обойти.

Теперь у вас есть две локальные ветви:redmine/3.2-stable, который отслеживает Redmine 3.2 без дополнительного функционала из репозитория github/redmine, представленная вышеуказанным удаленным восходящим репозиторием,local/3.2-stable, куда будут помещены все настройки развертывания, кастомизации, темы и плагины.

Пропатчите обновления версий

Redmine использует следующую схему нумерации версий: xyz Major/Minor/Patch. Каждая младшая версия имеет собственную стабильную ветку, в которой исправления и патчи безопасности будут применяться с течением времени (до тех пор, пока эта версия все еще поддерживается). В нашем случае это ветвь 3.2-stable.

Время от времени эта восходящая ветвь будет получать некоторые новые коммиты. Ваша задача — включить новые коммиты в локальную ветвь local/3.2-stable для развертывания.

Хотя возможно и просто регулярно дополнять восходящую ветвь, я предлагаю использовать git rebase для поддержки собственного набора изменений поверх стокового кода Redmine:

Перебазирование локальных изменений поверх «голого» Redmine:

$ git checkout redmine/3.2-stable $ git pull                          # new upstream commits coming in $ git checkout local/3.2-stable $ git rebase redmine/3.2-stable

Команда rebase:

  • Отменит все локальные изменения в local/3.2-stable.
  • Обновит local/3.2-stable, чтобы отразить изменения, произошедшие в redmine/3.2-stable.
  • Повторно применит все локальные изменения поверх «голой» версии.

Итогом будет являться чистая история, в которой ваши (локальные) коммиты всегда находятся поверх последних (восходящих) коммитов Redmine.

Младшие и старшие обновления

Теперь, когда есть новая стабильная ветвь (скажем, 3.3-stable), делайте то же самое — перебазируйте ваши изменения поверх неё. Команды git будут немного отличаться из-за изменения восходящей ветви:

Перенос локальных изменений в новую стабильную ветвь

$ git fetch upstream $ git checkout -b redmine/3.3-stable upstream/3.3-stable $ git checkout -b local/3.3-stable local/3.2-stable $ git rebase --onto redmine/3.3-stable redmine/3.2-stable local/3.3-stable

Эти команды вначале создают две новые локальные ветви для версии 3.3: одну из восходящей, а другую — из локальной ветви 3.2. Затем они перебазируют локальные изменения поверх redmine/3.3-stable. Локальные изменения здесь — это разность между redmine/3.2-stable и local/3.3-stable (что по-прежнему является redmine/3.2-stable). Теперь local/3.3-stable содержит Redmine 3.3 плюс любые локальные изменения.

Для новой старшей версии требуется сделать то же самое.

Бог ты мой, у меня конфликты!

Рано или поздно (вероятно, уже во время первого обновления до новой младшей версии) вы столкнетесь с конфликтами слияния. Во время ребазирования Git применяет коммиты один за другим и останавливается каждый раз, когда применение коммита происходит с ошибками. В этом случае команда git status покажет проблемные файлы.

Проверьте, какой из коммитов дал сбой, узнайте, для чего он предназначался (хорошо помогут осмысленные сообщения коммитов), исправьте файлы, командой git add добавьте каждый исправленный файл, когда закончите. Если конфликты были устранены, можно просмотреть изменения, которые будут зафиксированы, с помощью команды git diff --cached. Как только вы сочтете результат удовлетворительным, можно продолжить ребазирование с помощью команды git rebase --continue.

Если вы неожиданно получили кучу конфликтов, а времени на решение этой проблемы нет, можно просто прервать текущее ребазирование с помощью параметра --abort, который восстановит рабочую копию до исходного состояния.

Что дальше?

Теперь, когда рабочий процесс Git настроен должным образом, пришло время автоматизировать развертывание, о котором я расскажу во второй части этого руководства (примечание: перевод второй части будет доступен в течение нескольких дней).

Ссылки

  1. Deploy and maintain Redmine the right way
  2. Развертывание Redmine с помощью Capistrano (вторая часть).
Redmine
Тип Система отслеживания ошибок, система управления проектами
Разработчик Jean-Philippe Lang
Написана на Ruby
Операционная система Кроссплатформенное программное обеспечение
Языки интерфейса несколько языков[d][1]
Первый выпуск 25 июня2006
Аппаратная платформа Ruby on Rails
Последняя версия 4.1.1 (6 апреля2020 года)
Лицензия GNU General Public License
Сайт redmine.org
15px-Commons-logo.svg.png Медиафайлы на Викискладе

Redmine[ɹɛdˈmɑɪn] — открытое серверное веб-приложение для управления проектами и задачами (в том числе для отслеживания ошибок). Redmine написан на Ruby и представляет собой приложение на основе широко известного веб-фреймворка Ruby on Rails. Распространяется согласно GNU General Public License.

Функциональные возможности

Данный продукт предоставляет следующие возможности:

  • ведение нескольких проектов;
  • гибкая система доступа, основанная на ролях;
  • система отслеживания ошибок;
  • диаграммы Ганта и календарь;
  • ведение новостей проекта, документов и управление файлами;
  • оповещение об изменениях с помощью RSS-потоков и электронной почты;
  • форумы для каждого проекта;
  • учёт временных затрат;
  • настраиваемые произвольные поля для инцидентов, временных затрат, проектов и пользователей;
  • лёгкая интеграция с системами управления версиями (SVN, CVS, Git, Mercurial, Bazaar и Darcs);
  • создание записей об ошибках на основе полученных писем;
  • поддержка множественной аутентификации LDAP;
  • возможность самостоятельной регистрации новых пользователей;
  • многоязычный интерфейс (в том числе русский);
  • поддержка СУБДMySQL, Microsoft SQL Server[2], PostgreSQL, SQLite.

Структура базы данных

Пользователи системы

Пользователи являются одним из центральных понятий предметной области. Модель пользователя является основой для идентификации и аутентификации работающего с системой персонала и клиентов, а также для авторизации их в разных ролях, проектах и т. п.

Роли

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

Пользователям назначается роль в каждом проекте, в котором он участвует, например, «менеджер в проекте по разработке сайта А», «разработчик в проекте по поддержанию интранета компании» или «клиент в проекте по рефакторингу информационной системы компании Б». Пользователь может иметь несколько ролей. Назначение роли для отдельной задачи (issue) в данный момент невозможно.

Проекты

Проект является одним из основных понятий в предметной области систем управления проектами. Благодаря этой сущности возможно организовать совместную работу и планирование нескольких проектов одновременно с разграничением доступа различным пользователям (см. выше). Проекты допускают иерархическую вложенность.

Трекеры

Трекеры являются основной классификацией, по которой сортируются задачи в проекте. Само по себе понятие «трекер» восходит к системам учёта ошибок (англ. Bug tracking tool), представлявшим каждая в отдельности один проект.

По сути, в «Redmine» трекеры представляют собой аналог подклассов класса «Задача» и являются основой для полиморфизма разного рода задач, позволяя определять для каждого их типа различные поля. Примерами трекеров являются «Улучшение», «Ошибка», «Документирование», «Поддержка».

Задачи

Задачи являются центральным понятием всей системы, описывающим некую задачу, которую необходимо выполнить. У каждой задачи в обязательном порядке есть описание и автор, в обязательном порядке задача привязана к трекеру.

Каждая задача имеет статус. Статусы представляют собой отдельную сущность с возможностью определения прав на назначение статуса для различных ролей (например, статус «отклонён» может присвоить только менеджер) или определение актуальности задачи (например, «открыт», «назначен» — актуальные, а «закрыт», «отклонён» — нет).

Для каждого проекта отдельно определяются набор этапов разработки и набор категорий задач. Среди других полей интересны также «оценённое время», служащее основой для построения управленческих диаграмм, а также поле выбора наблюдателей за задачей (см. «Получение уведомлений»). К задачам имеется возможность прикреплять файлы (имеется отдельная сущность «Приложение»).

Значения других перечислимых свойств (например, приоритетность) хранятся в отдельной общей таблице.

Отслеживание изменения параметров задач

За отслеживание изменений параметров задач пользователями в системе отвечают две сущности: «Запись журнала изменений» и «Изменённый параметр». Запись журнала отображает одно действие пользователя по редактированию параметров задачи и/или добавление комментария к ней. То есть служит одновременно инструментом ведения истории задачи и инструментом ведения диалога.

Сущность «Изменённый параметр» привязана к отдельной записи журнала и предназначена для хранения старого и нового значения изменённого пользователем параметра.

Связи между задачами

Задачи могут быть взаимосвязаны: например, одна задача является подзадачей для другой или предшествовать ей. Эта информация может быть полезна в ходе планирования разработки программы, за её хранение в Redmine отвечает отдельная сущность.

Учёт затраченного на проект времени

Система поддерживает учёт затраченного времени благодаря сущности «Затраченное время», связанной с пользователями и задачей. Сущность позволяет хранить затраченное время, вид деятельности пользователя (разработка, проектирование, поддержка) и краткий комментарий к работе. Эти данные могут быть использованы, например, для анализа вклада каждого участника в проект или для оценки фактической трудоёмкости и стоимости разработки.

Привязка репозиториев

Redmine предоставляет возможность интеграции с различными системами управления версиями (репозиториями). Интеграция заключается в отслеживании изменений во внешнем репозитории, их фиксации в базе данных, анализе изменений с целью их привязки к определённым задачам.

В инфологической структуре системы за интеграцию с внешними репозиториями отвечают три сущности: Репозиторий, Редакция и Изменение.

  • Репозиторий — связанная с проектом сущность, хранящая тип подключенного репозитория, его местонахождение и идентификационные данные его пользователя.
  • Редакция — отображение редакции репозитория, и, кроме информационных полей, может быть привязана к конкретной задаче: для этого требуется указать в описании изменений «refs #NUM», где NUM — номер задачи), и к пользователю-автору редакции.
  • Изменение — хранит список измененных (добавленных, удалённых, перемещенных, модифицированных) файлов в каждой редакции.

Получение уведомлений

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

Некоторые недостатки Redmine

  • Управление файлами и документами в Redmine сводится к их добавлению, удалению и редактированию. Правами доступа ни к файлам, ни к отдельным документам управлять нельзя.
  • В Redmine нельзя управлять правами доступа на уровне отдельных полей задачи. Например, на данный момент от клиентов нельзя скрыть оценки времени работы над задачей. Но можно сделать дополнительные поля видимыми только пользователям с определёнными ролями.
  • В Redmine в список задач не выводится общая трудоёмкость задач.
  • Нет возможности дать пользователю роль во всей системе; например, «Руководитель проектного офиса» должен иметь доступ ко всем проектам в системе: для этого нужно добавить пользователя с этой ролью во все проекты.
  • Подключить git репозиторий возможно только в случае, если и Redmine, и репозиторий находятся на одном сервере.

ChiliProject

В результате того, что видение некоторых пользователей относительно проекта отличалось от видения лидера разработчиков, был создан форк Redmine под названием ChiliProject. В настоящее время данный проект закрыт.

См. также

  • Сравнение систем управления проектами
  • Сравнение систем отслеживания ошибок

Примечания

  1. Features
  2. Installing Redmine (неопр.). Redmine ©.

Литература

  • 前田剛 (Go Maeda). 入門Redmine Linux/Windows対応. — 秀和システム. — 226 с. — ISBN 978-4-7980-2137-9.
  • Gunther Popp. Konfigurationsmanagement mit Subversion, Maven und Redmine: Grundlagen für Softwarearchitekten und Entwickler. — 3. — Dpunkt.Verlag GmbH, 2009. — P. 362. — ISBN 9783898645218.

Ссылки

modif.png Эта страница в последний раз была отредактирована 22 сентября 2020 в 12:51. Используемые источники:

  • https://ru.bmstu.wiki/redmine
  • https://startpack.ru/application/redmine
  • https://sohabr.net/habr/post/337884/
  • https://habr.com/ru/company/southbridge/blog/329872/
  • https://wiki2.org/ru/redmine

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий