Вступление


Здравствуйте, сегодня я расскажу вам о моём сервисе kanbanonrails.com, позволяющем создавать Канбан доски и интегрировать их с Github и Bitbucket.

Что такое Kanban методология?


Я не буду углубляться в подробности, так как методология уже была описана на Хабре и не раз, скажу лишь что по сути это некий инструмент, который позволяет эффективно управлять проектом. В данном статье я расскажу о карточном Канбане и его реализации в программном виде.

У нас есть набор карточек(так называемых issues'ов, то есть задач) и есть столбцы, по которым мы перемещаем наши карточки. Как правило при создании задачи мы помечаем её каким-нибудь тегом, например «backlog» или «ready_to_work», таким образом она сразу соотносится с одним из наших столбцов, в которые попадают задачи с тегами «backlog» или «ready_to_work» соответсвенно. Затем, по мере продвижения работы с этой задачей, мы перемещаем её в другие столбцы, например, «coding», «testing» и так далее. Идея в том, чтобы рационально использовать свою производительность и не допускать скопления карточек в одном из столбцов. Кроме того, всё это позволяет видеть кто над чем работает и понять насколько проект продвигается вперёд.

Какие есть текущие имплементации?


Конечно же сейчас существует множество сервисов, которые позволяют делать то, что я написал выше. Но у каждого из них есть свои недостатки(нюансы). Например за большинство из них нужно платить. Не у всех из них есть интеграция с Гитхабом или Битбакетом. Не все они удобны и обладают нормальным пользовательским интерфейсом. Кроме того, не все они позволяют делить «доски» на секции. Вот, например, довольно популярные сервисы waffle.io huboard.com trello.com но у всех у них есть недостатки, описанные выше.

Возможности и функциональность моего сервиса


Поэтому я решил создать свой сервис, который будет довольно гибким и функциональным. Вы можете пригласить менеджеров и при этом им не нужно будет предоставлять доступ непосредственно к гитхаб/битбакет репозиторию. Они могут быть вообще там не зарегистрированы, например. При создании инвайта, вам нужно будет указать роль пользователя в проекте. Сейчас доступно три роли «owner», 'member', 'manager'. Пользователь с ролью «owner» может редактировать/удалять проект, «member» и «manager» — не могут. Кроме того, «owner» и «member» могут создавать тикеты. Доски можно разбивать на секции и колонки. Вы можете создать секцию с названием «All»(например) и включить туда все тикеты(нужно поставить соответсвующую галочку в чекбоксе). А можете создать секцию «Clients» с тегом «client» и туда будут попадать все тикеты, у которых есть тег «client». Далее можно создавать столбцы для секций. При создании столбцов учитывайте, что теги не должны перекрываться. То есть, например, вы можете создать столбец Design с тегом «design» и все тикеты, у которых есть среди тегов «design» попадут туда. Кроме того вы можете указывать высоту и ширину столбца. Сервис переведён на 71 язык, правда в основном автоматическим переводом, но вы всегда можете послать Pull Request если увидете ошибку или неточность в переводе. Далее я немного опишу процесс синхронизации с Гитхабом и Битбакетом, но при этом вы всегда можете использовать мой сервис и без подключения Гитхаба и Битбакета.

Синхронизация проектов


Для того, чтобы засинхронизировать свои проекты с Гитхаба или Битбакета, вы должны сначала подключить эти сервисы в своих настройках или можете просто зайти через них кликнув в меню по соответсвующей иконке. Далее вам нужно будет нажать на кнопки синхронизации в разделе с проектами. Не забудьте одобрить запрос к данным организации при авторизации через Гитхаб, иначе нельзя будет синхронизировать репозитории вашей организации.

Синхронизация тикетов


При синхронизации проектов заодно перенесутся и их задачи(issues). Стоит обратить внимание, что у некоторых проектов(репозиториев) могут быть не подключены Issues, так что вы не увидете там никаких тикетов, поэтому убедитесь, что раздел с Issues'ами у вас включен в Гитхабе или Битбакете.

Создание вебхуков


После того как проекты и задачи засинхронизируются, через апи сервис создаст хуки, которые будут отправляться на сервис при создании/обнолении задач.

Почему open source?


Во-первых, я всегда был сторонником open source проектов. Во-вторых, в приватных репозиториях может содержаться очень важная информация, поэтому я решил, что будет правильней сделать этот сервис с открытым исходным кодом, чтобы все параноики желающие могли задеплоить его на свой сервер и пользоваться им не боясь, что их код кто-то украдёт. Ну и в-третьих, я надеюсь, что сообщество тоже будет принимать участие в проекте или хотя бы ставить звёздочки :-)

Стек технологий


В этом сервисе я использую мой любимейший стек технологий: Ruby, Ruby on Rails, PostgreSQL, Slim, Sass, CoffeeScript, Sidekiq, Redis, Memcached и множество других. Для real-time взаимодействия с пользователем используюся вебсокеты, а именно фреймворк Action Cable. Я ещё хотел добавить Selenium, потому что я очень люблю приёмочные тесты на кукумбере, но решил ограничиться интеграционными тестами, потому что, как вы знаете, покрывать тестами код и рефакторить его можно до бесконечности, а мне уже очень хотелось запуститься.

Заключение


Проект я сделал примерно за 10 дней, работая преимущественно по ночам. Работы проделано немало, но много наработок я использовал из своих предыдущих проектов. Кроме того, я столкнулся с некоторыми неожиданностями(тут как никогда подходит слово «issues»): например гем, который я использовал для обращения к апи битбакета, выдавал ошибку при попытке создания вебхука. Пришлось сделать форк и кое-что в нём поправить(это скорее временное решение, так что я не стал делать Pull Request в репозиторий с гемом). Мой сервис находится в самом начале своего развития и многое предстоит сделать, так что если есть вопросы, пожелания или замечания, пишите в комментариях, я буду рад их прочитать и отвечу на них по мере возможности.

Сервис с открытым исходным кодом, поэтому вы можете задеплоить его на свой сервер и использовать для вашей компании, но если у вас нет своих серверов или вы не хотите заморачиваться с деплоем, вы можете зарегистрироваться тут kanbanonrails.com (можно зайти через Github или Bitbucket). Регистрация и создание проектов на сайте пока бесплатны, возможно в будущем возникнут тарифы, а может обойдёмся и без тарифов, например будем зарабатывать на рекламе. Во всяком случае вы всегда сможете склонировать код и задеплоить его на свой сервер, проект будет open source и я не планирую его закрывать/менять лицензию. Кстати, на этот проект и на некоторые другие мои проекты я ищу инвесторов, так что если вы заинтересованы в сотрудничестве пишите сюда partnership@technoelegance.com или сюда kopylov.german@gmail.com

Ну и конечно же ссылка на гитхаб репозиторий: github.com/technoeleganceteam/kanban_on_rails

UPD(10.07.2016): Сделал интеграцию с Gitlab'ом и написал об этом в README.md. Если вкратце: с основным сервером Gitlab(https://gitlab.com) я сделал интеграцию по-умолчанию и решил, что если пользователь использует свой собственный сервер для Гитлаба, то он скорее всего сможет задеплоить и KanbanOnRails тоже на свой сервер и использовать его, но для этого ему нужно будет прописать несколько параметров в Settings, о которых я написал в README.md.
Поделиться с друзьями
-->

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


  1. IvanPanfilov
    08.06.2016 15:51
    -1

    ROR умер
    лучше бы делали на
    http://www.phoenixframework.org/docs/overview

    больше перспективы в масштабировании и получения бабла


    1. romanzi
      08.06.2016 16:15

      > ROR умер
      wat?


  1. melvin
    08.06.2016 16:31
    +2

    будет ли интеграция с gitlab?


    1. gkopylov
      08.06.2016 16:52
      +1

      Да, очень хотелось бы сделать. Я думал о ней в самом начале, но там возникает такой нюанс, что не понятно где приложение создавать для интеграции и для Oauth. Гитлаб — это больше распределённая система и обычно устанавливается на свой сервер и я так понял, что консьюмер приложение там создаётся на сервере, на котором он задеплоен.

      В общем, я поисследую этот вопрос побольше и что-нибудь придумаю.


    1. gkopylov
      09.06.2016 21:55
      +1

      Сделал, чуть позже напишу в README.md как будет происходить эта интеграция.


  1. S_A
    09.06.2016 04:11

    Идея хорошая (женить канбан с другими системами из коробки). В частности я однажды поженил Redmine с Wekan, а последний еще и допилить пришлось. Я к тому намекаю, что github это хорошо (gitlab еще лучше...), а интеграция с сервисами не кода, а проектными — вот что очень часто требуется. У Redmine есть канбан-плагин, но его бесплатная версия не очень веселая (да и платная тоже не векан), но у редмайна есть интеграция с vcs из коробки.

    Я кстати зарегистрировался, не врубился зачем тэги и как они работают, сделал доску (весьма непонятная процедура надо заметить), и так и не завел на ней карточку. Очевидно, я что-то делал не так. Но поскольку open source досок раз-два и обчелся, вашему проекту респект. Я хоть ruby и вообще не знаю (не говоря уже о on rails), тот же векан приходиться хостить в докерах, что то еще приключение. Так что технология (для тех кто юзает редмайн) в самый раз, если у себя хостить.


    1. kay
      13.06.2016 23:15

      А процесс и результат женитьбы где-нибудь описан?


      1. S_A
        14.06.2016 04:08

        Увы, нет, так как дело было не в моё свободное время (мне за это заплатили). Если вкратце про способы — я далеко не ходил, на стороне векана опубликовал простецкий url, по обращению на который векан забирал по JSON API редмайна всю инфу по тикетам и проектам. На стороне редмайна сделал очень простой плагин в три строчки, который по хукам добавления/изменения этот url забирал из custom field проекта и просто продергивал этот самый url.

        На стороне векана тремя строчками я не выкрутился, но так как векан на метеоре, всё оказалось достаточно легко (в т.ч. прикрутить чек-листы к карточкам, процент от «чеков» которых уходил в редмайн). А для тех кому достаточно трелло, векан вообще вариант, считаю.

        Результат кстати в продакшене. It works, что называется. Поскольку у редмайна апи достаточно секурное, то всё вполне нормально. Даже если кто-то руками продернет url синхронизации (а не зная какой он тоже не догадаешься), ничего необычного для системы не произойдет.


  1. iklementiev
    09.06.2016 11:20
    -1

    доступ к коду в репозиториях в итоге будет у сервиса? ссыкотно чего-то показывать свой говнокодец


    1. gkopylov
      09.06.2016 12:54
      +1

      При создании приложений для Oauth авторизации через Github и Bitbucket, пришлось выставить права на чтение репозитория, иначе я бы просто не смог через апи их синхронизировать и создавать/обновлять issues'ы в них. Если вы посмотрите на другие сервисы(тот же Waffle.io например), то у них как правило у всех выставлены права на Full control ваших репозиториев. Это кстати и послужило одной из мотиваций для того, чтобы создать open source сервис, который любой желающий мог бы задеплоить на свой сервер, создать свои собственные Oauth приложения и не переживать насчёт того, что они имеет доступ к его репозиториям.

      Честно говоря, я не очень понимаю политику Github и Bitbucket в том плане, зачем им для того, чтобы управлять issues'ами нужен доступ к репозиторию. Возможно конечно я и ошибаюсь и можно как-то обойти это, то есть выставить такую комбинацию скоупов, что приложение может создавать/обновлять issues'ы в приватных репозиториях без доступа к ним, но у меня не получилось сделать такой комбинации. Если у вас получится, напишите, пожалуйста, в комментарии, я с радостью обновлю скоупы.


  1. Infokain
    10.06.2016 00:03

    На самом деле я, наверно, тот инвестор которого Вы ищите, я с вами свяжусь, но хотел отписать пару строк в комментариях для того, что бы заинтересованных (касается именно программистов) присоединился к разработке.
    Идея родилась совсем недавно, подробности раскрывать не буду но суть опишу…
    Как все знают на просторах интернета очень много сервисов которые помогают нанять фрилансеров к разработке. «Куча» проектов мелькает перед глазами и в каждом 10, а то и больше, тех кто готов выполнить работу. Заказчик в свою очередь сталкивается с проблемой выбора, я бы даже сказал не выбора, а эксперимента, сделает программист свою работу или нет.
    Моя идея заключается в следующем — создать глобальную веб студию (от части и для реализации своих идей), с привлечением любых исполнителей любого профиля.
    Суть очень проста:
    1) заказчик описывает поставленные задачи;
    2) менеджер, он сидит в том же канбане — такой же наемный сотрудник как и все, и у него выскакивает данный таск. Он раскидывает данную задачу на ТЗ-шки по профилю работ программистов, верстальщиков, дизайнеров… и описывает приблизительные человеко часы;
    3) система производит поиск свободных специалистов по каждому из профилей, оптимизируя поисковый запрос по предложенной цене заказчика и соответствующих, в зависимости от опыта работы, цен за час работы, занятости, отзывов — заявленных специалистов;
    4) формируется команда для проекта, никто не знает кто где живет и работает, но все любят кодить или зарабатывать, для кого как;
    5) каждый специалист получает свое ТЗ и доступ в канбан;
    6) вся команда имеет доступ друг к другу в общем чате со встроенным «транслейтом»;
    7) после реализации проекта, программисты оставляют отзывы и ставят баллы ПРОГРАММИСТАМ, т.е. друг другу, с кем работали в команде, ну и конечно положительный отзыв заказчика тоже кладется в общий котел, формируется реальный рейтинг программистов, а не только положительные отзывы заказчика.
    В чем преимущество данного подхода?, все очевидно — веб студия с неограниченными ресурсами.
    Суть, я думаю, ясна, пошел писать письмо исполнителю.
    Кто за, добро пожаловать в команду, пишите trkminfo@gmail.com


    1. samizdam
      10.06.2016 10:03

      Идея не нова. В реальности существуют подобные фриланс-артели, правда, вероятно, без подобной степени автоматизации. По крайней мере в одной такой я состоял несколько лет назад. Состоял недолго, т.к. фриланс не моё, к тому в той артели дела шли по моей специализации тухловато.
      Суть там та же, только большинство процессов реализуется в ручную:
      1. Есть «менеджеры» — мониторят все биржи и хватают интересные заказы. Взаимодействуют с заказчиков, ставят задачи в артельном трекере, администрируют исполнение и «общаковые» профили на биржах т.п.
      2. Ватага программистов со всего союза флудит целыми днями в чатике и ждёт подходящих тикетов в трекере?
      3. Профит: лично я не поимел, да и старожилы жаловали на нехватку достойных заказов.

      PS: таск-трекер у них был самописный. И ещё некоторые тулы для команды.


    1. gkopylov
      10.06.2016 10:04

      Спасибо за предложение, но мне не нужна своя веб студия, мне нужен инвестор, который вложится в рекламу/привлечение пользователей, согласится поддерживать проект(поможет с менеджерами/бухгалтерами) и с которым можно было бы обсудить планы по монетизации проекта. Насчёт монетизации, ещё раз хотелось бы подчеркнуть, что проект всегда будет open source и бесплатным для частного использования на своих серверах.


  1. samizdam
    10.06.2016 09:56

    Круто, давно искал что-то аналогичное описанному сервису для домашних проектов, но ничто из существующего не нравилось. Буду тестировать.
    Спасибо!


  1. Samehadar
    10.06.2016 09:56

    Предлагаю добавить какой-нибудь трекер(например pomodoro timer)


  1. ukko
    10.06.2016 13:06

    Мы в компании используем вот такую систему https://kanboard.net написанную на php.

    С плагинами её можно сильно прокачать.