Добавляем http-ссылки на самописную систему учета задач

Программирование - Инструментарий

Захотелось мне, чтобы в удаленном git репозитории можно было указывать ссылки на задачи и переходить по ним. Но не очень хотелось тратить на это много времени.

Вступление

Наша команда начала использовать выгрузку в GIT. Мы используем Гиттер ( оригинал и моя доработка ). Так же можно использовать GitSync на OneScript ( раз и два и три). Я выбрал Гиттер, т.к. он полностью на 1С, в которой я отлично разбираюсь и без проблем смог расковырять, посмотреть, доработать и отладить работу с gitом.

В качестве удаленного репозитория мы используем bitbucket.org . Он позволяет делать бесплатные приватные репозитории на команду до 5 человек и размером до 2гиг. Наша вхламинушку переписанная УПП и ее 300 коммитов сейчас занимает 340мб. Но пришлось настроить .gitignore на многие файлы, и поэтому обратно конфу собрать нельзя.

Так же на БитБакете есть возможность обсуждения кода (для проведения код-ревью), что стало главным огромным плюсом, ради чего и был переход на Git.

На GitHub приватные репозитории за небесплатно, но там и возможностей больше. Вроде. Я не смотрел особо. Есть еще GitLab и возможность поднять локальный сервер для удаленного репо, и там даже есть подсветка синтаксиса 1С, но я его даже не смотрел еще.

!!!Не выкладывайте в публичные репозитарии код типовых. Лицензионная политика 1С по отношению к коду БСП и типовых еще не утверждена и неизвестна. Так что это может быть противозаконно!!!

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

Статья состоит из 3х частей: настройка на стороне БитБакета, создание http-сервиса и его публикация. Если у вас уже есть http-сервис, то можно прочитать только первую часть.

Настройка на стороне БитБакета

Идем в нужный репозиторий на БитБакете, в настройки и там в ссылки. Там можно настроить ссылки на существующие сервисы, если они у вас есть, а можно добавить ссылку на свой.

Определяемся с ссылкой, по которой будем переходить и с форматом сообщения, которое должно будет распарситься. В качестве формата я выберу fix-123 и task-123 для багов и задач соответственно. А ссылки должны формироваться по правилам 1С, пусть будут localhost/Tracker/hs/Bags/123 и localhost/Tracker/hs/Tasks/123 . Мне достаточно пофик, что это все будет работать только в локалке, работаю то я в основном в ней, а когда не работаю, то и задачи мне без интереса. Опять же сюда можете подставить свои адреса от существующих трекеров не на 1С.

Для формата есть ряд ограничений. Формат #123 зарезервирован под внутренний трекер задач (кстати, можно использовать и его), формат BB-123 зарезервирован под Jira, может еще какие-нибудь тоже заняты.

Теперь указываем это в настройках. Жмем добавить произвольную ссылку (Add a custom link) и заполняем поля.

Формат задается в поле Link key и является регулярным выражением. Результат разбора подставляется в Link url вместо \1, \2 итп. Для ссылок на задач добавим еще одну ссылку.

Проверим работу. Закоммитим что-нить и посмотрим как это выглядит.

fix и task превратились в ссылки, bag нет, т.к. для него мы не добавили ссылки. При нажатии переходит по нужному адресу. Правда по этому адресу ничего нет, но это я решу в следующей части.

Создание http-сервиса

Я бы не стал с ними заморачиваться, если б уже не натренеровался их делать: HTTP-сервис: отчеты [Расширение]

Весь сервис состоит из 4х частей:

  1. настройка сервиса (имя, параметры, шаблон),
  2. парсер входящих параметров,
  3. получение контента по параметрам,
  4.  возврат результата.

Настройка сервиса

Создаем 2 http-сервиса: Tasks и Bags. Они идентичны кроме идентификаторов. В первом случае будет Tasks и получать данные будет из справочника Задачи, второй Bags и даные будет брать из справочника Ошибки. В остальном они идентичны, поэтому рассказывать буду только про Tasks. Кстати, во вложении конфигурация, где весь код есть.

Так вот. Добавляем новый сервис

Добавляем новый шаблон URL

И новый метод Get

В итоге

Парсер входящих параметров

Тут все просто, берем параметр URL, по нему ищем задачу, по ней формируем html и возвращаем

Функция ПолучитьЗадачуGET(Запрос)
	
	номерЗадачи = Запрос.ПараметрыURL["string"];
	
	Если номерЗадачи = "Ping" Тогда
		Ответ = Новый HTTPСервисОтвет(200);
		Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
		Ответ.УстановитьТелоИзСтроки( НСтр( "ru='Поздравляем!!! Подключение выполнено успешно!'" ) );
		Возврат Ответ;
	КонецЕсли;
	
	Попытка
		
		найденнаяЗадача = Справочники._Задачи.НайтиПоКоду( Число( номерЗадачи ) );
		
		Если ЗначениеЗаполнено( найденнаяЗадача ) Тогда
			
			Ответ = Ответ_Задача( найденнаяЗадача );
			
		Иначе
			
			Ответ = Ответ_ЗадачаНеНайдена();
			
		КонецЕсли;
		
	Исключение
		
		Ответ = Ответ_ОшибкаВыполнения();
		
	КонецПопытки;
	
	Возврат Ответ;
	
КонецФункции

Получение контента по параметрам

Мне было очень лень делать красивую html страничку под задачу, поэтому я создал в конструкторе печатную форму, а потом этот табличный документ превращал в html. 

Но потом захотелось иметь ссылку, чтобы можно было перейти прям в 1Ску. Сделал так:

текстHTML = ПолучитьТекстHTMLПоТабличномуДокументу(таблДок);

СсылкаНаЗадачу = "<a href=" + Константы._АдресПубликацииИнформационнойБазы.Получить() + "#" + ПолучитьНавигационнуюСсылку(пОшибка) + ">Перейти в 1С</a>";

текстHTML = стрЗаменить( текстHTML, "</body></html>", СсылкаНаЗадачу + "</body></html>" );

где константу заполняю обработкой, запущенной в тонком клиенте, вот так

&НаСервере
Процедура ПриОткрытииНаСервере(адрес)
	
	Константы._АдресПубликацииИнформационнойБазы.Установить( адрес );
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	адрес = ПолучитьНавигационнуюСсылкуИнформационнойБазы();
	
	ПриОткрытииНаСервере(адрес);
	
КонецПроцедуры

 Возврат результата

Тут самое простое, устанавливаем ответ 200, заголовок, что это html, собственно тело и все

Функция Ответ_Задача( Знач пЗадача )
	
	Попытка
		
		таблДок = Новый ТабличныйДокумент;
		Справочники._Задачи.Печать( таблДок, пЗадача );
		
	Исключение
		
		Возврат Ответ_НеверныйЗапрос( ИнформацияОбОшибке() );
		
	КонецПопытки;
	
	текстHTML = ПолучитьТекстHTMLПоТабличномуДокументу(таблДок);
	
	СсылкаНаЗадачу = "<a href=" + Константы._АдресПубликацииИнформационнойБазы.Получить() + "#" + ПолучитьНавигационнуюСсылку(пЗадача) + ">Перейти в 1С</a>";
	
	текстHTML = стрЗаменить( текстHTML, "</body></html>", СсылкаНаЗадачу + "</body></html>" );
	
	Ответ = Новый HTTPСервисОтвет(200);
	Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
	Ответ.УстановитьТелоИзСтроки( текстHTML );
	
	Возврат Ответ;
	
КонецФункции

Публикация http-сервиса

Как настраивать апач, включать отладку, пробрасывать в интернет итп я рассказывать не буду. У меня как то уже все работает, а статей по этой теме уже много. Так что все просто, идем в публикацию, публикуем только эти сервисы, ребутаем апач и проверяем. Главное, чтобы имена совпадали у публикации и у адреса, что мы уже в БитБакете ввели (можно конечно в БитБакете заменить ссылку). 

Всю радость от заработавшего http-сервиса портит тот момент, что приходится вводить параметры аутентификации

Тут я так же поступил по ленивому и радикально. Идем в папку с публикацией, у меня это c:\WWW\Tracker\ , я ее еще стрелочкой выше отметил. Открываем единственный там файл default.vrd в блокноте, добавляем в строчку ib= логин и пароль пользователя, под которым будем открывать задачи. Например, я добавил пользователя WEB с паролем WEB и эта строчка стала выглядеть вот так

ib="File=&quot;G:\Bases\TasksInfostart&quot;;usr=&quot;WEB&quot;;pwd=&quot;WEB8&quot;"

На всякий ребутнем апач.

Внимание! Если использовать этот способ, то вся публикация будет открываться под этим пользователем. То есть если еще опубликован веб-интерфейс, то он так же молча будет открываться под WEB. Для более тонкой настройки можно этот финт сделать отдельно для точки подключения, приводить этот способ здесь я конечно не буду.

ИТОГ

После всех доработок результат выглядит так:

PS Если у вас не заработал переход в 1С прям с сайта, то нужно применить еще чуть-чуть магии. Создаем новый текстовый документ, вставляем туда

REGEDIT4

[HKEY_CLASSES_ROOT\e1c]
@="URL:e1c Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\e1c\DefaultIcon]
@="\"C:\\Program Files (x86)\\1cv8\\common\\1cestart.exe\""

[HKEY_CLASSES_ROOT\e1c\shell]

[HKEY_CLASSES_ROOT\e1c\shell\open]

[HKEY_CLASSES_ROOT\e1c\shell\open\command]
@="\"C:\\Program Files (x86)\\1cv8\\common\\1cestart.exe\" /url \"%1\""

Сохраняем как "e1creg.reg" и запускаем под админом.

PPS Эта конфигурация так же доступна на https://github.com/Stepa86/1C-Tasks-for-web

Скачать файлы

Наименование Файл Версия Размер
Конфигурация пример
.cf 28,32Kb
09.02.17
3
.cf 28,32Kb 3 Скачать

См. также

Комментарии
1. Антон Грачев (Fragster) 714 09.02.17 11:31 Сейчас в теме
Сумки вместо багов :)
GreenDragon; CyberCerber; Stepa86; +3 Ответить 1
2. Антон Степанов (Stepa86) 855 09.02.17 11:35 Сейчас в теме
(1) Знал бы английский, не занимался бы 1Сом. Читать как "Мешочек багов"
KapasMordorov; TreeDogNight; madonov; CyberCerber; Soloist; white_sochi; Fragster; +7 Ответить 1
3. Василий Попов (white_sochi) 98 09.02.17 11:47 Сейчас в теме
!!!Не выкладывайте в публичные репозитарии код типовых. Лицензионная политика 1С по отношению к коду БСП и типовых еще не утверждена и неизвестна. Так что это может быть противозаконно!!!

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


Так может выложить свою на гитхаб или бакет
4. Антон Степанов (Stepa86) 855 09.02.17 13:02 Сейчас в теме
5. Alexander Speshilov (speshuric) 944 09.02.17 14:22 Сейчас в теме
Решение интересное, но не проще ли было поднять свой гитлаб? Бесплатно. Нет ограничений на размер и количество пользователей. Захостить можно почти где угодно. Ставится за несколько минут. API, трекер, CI (правда очень "самобытный"), wiki, интеграция с LDAP.
6. Антон Грачев (Fragster) 714 09.02.17 15:54 Сейчас в теме
(2) Это заблуждение. Хорошо там, где нас нет.
grumagargler; +1 Ответить 1
7. Антон Степанов (Stepa86) 855 09.02.17 16:13 Сейчас в теме
(5) У меня есть репо на битбакете и у меня есть система учета задач на 1Ске, я предложил их немного сынтегрировать, причем публикация полезна как для пользователей битбакета, так и для тех, кто хочет светить из 1Ски что-то небольшое. А вы мне предлагаете тупо поставить гитлаб?
8. Антон Степанов (Stepa86) 855 09.02.17 16:33 Сейчас в теме
(5) гитлаб может и крутая штука, собственно одна из причин написания мной статей - узнать, а как на самом деле нужно было делать, но 1) я не очень умею разворачивать различные серверные штуки, особенно которые под юникс должны идти, особенно не имея компов под никсами и даже хоть какого то опыта работы с ними 2) Как все уже заметили, я не очень в английский, поэтому доки почитать не справляюсь 3) трекер (уже есть), CI (еще эксперементирую с применимостью и нанесением пользы), wiki (уже есть) и LDAP (что это???) новые как то и не особо нужны. Вот сервис по кодревью нужен, а я его у гитлаба не увидел.

Если у вас есть материалы и ссылки по гитлабу в связке с 1С или хотя бы на русском - сообщество вам только спасибо скажет.
9. Антон Степанов (Stepa86) 855 09.02.17 16:51 Сейчас в теме
(6) Когда я был студентом я пошел устраиваться программистов на плюсах и завалил собеседование из-за английского, а потом пошел на собеседование во франч, куда меня и взяли
10. Антон Грачев (Fragster) 714 09.02.17 16:54 Сейчас в теме
(9) я студентом вообще сторожем работал.
11. Alexander Speshilov (speshuric) 944 09.02.17 21:34 Сейчас в теме
(8) Ни в коем случае не подумайте, что мне что-то в вашем решении не понравилось. Нормальное решение, хорошо оформленная статья.
Просто немного удивило, что с вашими требованиями (закрытые бесплатные репозитарии, хотите больших объёмов) вы остановились BB.

Лично мне gitlab нравится гораздо больше.
1. Устанавливается реально просто.
2. Активно развивается (как обратная сторона - есть куда развиваться). За прошедший год авторы столько всего сделали, что я даже удивляюсь.
3. LDAP - это в первую очередь возможность подтянуть пользователей из active directory.
4. Сервис по code review - это же обычные мерж реквесты. Они там примерно аналог PR в bitbucket и github.
5. С продуктами atlassian интеграция, конечно, хуже чем в BB, но уж ссылки на тикеты подсвечивает.
6. Главное преимущество в том, что из альтернатив - единственный продукт, который можно установить локально абсолютно бесплатно и без ограничения по пользователям и с достаточным для комфортной работы функционалом. На моей нынешней работе есть куча ограничений по доступу к BB, потому что не куплено достаточно лицензий (аналитикам и другим "неразработчикам" не дают доступ).

На самом деле между gitlab/bitbucket/github примерный паритет по фичам и они очень похожи. У каждого из них есть свои фишки, но в целом для разработчика на 90% всё равно каким из них пользоваться. Чуть-чуть в стороне стоит upsource - он не выигрывает и не проигрывает, но заметно другой.
SerebanSK; JohnyDeath; Stepa86; +3 Ответить 2
12. Евгений Сосна (pumbaE) 564 09.02.17 23:38 Сейчас в теме
(11) к слову, адинєсники у себя внутри вроде stash используют.
13. Alexander Speshilov (speshuric) 944 10.02.17 10:04 Сейчас в теме
(12) Каждый из перечисленных чем-то хорош. BB очень даже интересен, когда есть hg-шники или когда весь остальной стек atlassian куплен (какими же дешёвыми кажутся лицензии 1С по сравнению с набором jira+conf+bitbucket, с учетом того что каждый год надо платить по половине начальной стоимости!).
Более того, git вполне позволяет в одной организации держать несколько разных source control серверов. Просто те, кого не устраивает общий продукт, настраивают зеркальный push со своей песочницы - так как минимум история коммитов сохраняется.
14. Yuri_V _____ (yur4ik9408) 33 16.02.17 10:50 Сейчас в теме
По поводу бесплатных альтернатив, которые можно развернуть локально, советую попробовать https://gogs.io/
Мы у себя пытались работать с гитлаб, но, с учетом его нехилых минимальных системных требований и скорости работы, как-то не пошло.
Потом, чисто случайно, наткнулись на вот эту радость. В связке с Redmine работает на ура.
15. Ruslan Odessa (rus128) 2 22.02.17 11:59 Сейчас в теме
Все хорошо и красиво.
Смущают только опечатки ("хочетЬся" - 2 раза, и "натренЕровался") :-)
16. Решитко Дмитрий (grumagargler) 291 05.04.17 21:21 Сейчас в теме
Вопрос немного в сторону. Поделитесь вашим опытом, насколько в итоге эффективно и всерьёз стало проводить код-ревью в условиях, когда не видно сопутствующих изменений, в частности, форм, планов-обмена прав и прочего? Тут я хотел акцентировать внимание не на самой необходимости анализа кода, а на том, насколько это удобно и эффективно делать при помощи гитов в связке с моделью приложения платформы 1С.
17. Антон Степанов (Stepa86) 855 06.04.17 08:52 Сейчас в теме
(16) Удобнее и эффективнее стало раз в 100. Если раньше нужно было специально разворачивать сравнение версий или садится читать отдельный блок с выпиской в отдельное место комментариев с какой нить хитрой привязкой к строчкам кода, то теперь это делается легко и удобно из интерфейса битбакета, гитлаба или гитхаба. И это мы еще на пул и мерджреквесты не перешли.
18. Александр Кузин (sashocq) 189 06.04.17 12:30 Сейчас в теме
(8) Я тоже начинал с bitbucket, но очень напрягало отсутствие подсветки синтаксиса 1С. Как увидел gitlab - перескочил на него. Собственно, на gitlab.com бесплатно работает с приватными репозиториями и ограничение по размеру там, вроде как, больше. Сейчас все задачи веду в нём.

я не очень умею разворачивать различные серверные штуки, особенно которые под юникс
я тоже, поэтому сейчас прохожу разработку по пром стандартам 2, там как раз это всё разжёвывается. Ещё можете успеть на текущий поезд.
19. Антон Степанов (Stepa86) 855 06.04.17 13:00 Сейчас в теме
(18) Я уже полностью перешел на гитлаб, там ограничение на репо 10гиг и нет ограничений на команду. Курсы мне не интересны.
20. Сергей Пискунов (SerebanSK) 25 18.04.17 10:00 Сейчас в теме
(11) Подняли сервер gitlab (community edition - бесплатный). Не найду как добавить ссылки в задачи способом, аналогичным описанному в текущей публикации.
У нас похожая ситуация: есть самописная система учета задач и в комментарии коммита в gitlab нужно видеть ссылку на задачу из нашей системы формата https://host/tasks/152187, где 152187 номер задачи. Сейчас мы можем при помещении изменений в хранилище указывать номер задачи из нашей системы в соответствии с некой маской, по которой потом будет происходить привязка ссылок (а точнее мы уже несколько лет указывали эти номера задач для всех помещений в хранилище, когда у нас еще не было git и соответственно мы и не думали сделать кликабельные ссылки).
Не найдя в gitlab настройки ссылок аналгичной bitbucket.org, решил при выгрузке истории хранилища в git добавлять в комментарий полную ссылку на задачу из нашей системы (доработав Гиттер - спасибо автору за полезную разработку). Но тогда адрес системы учета задач будет прописан в явном виде в каждом комментарии коммита и будет проблематично изменить адрес хоста при переносе системы учета задач на другой сервер.
Нагуглить решение данной проблемы средствами gitlab не получилось.
Может кто подскажет, умеет ли gitlab делать подобные ссылки?
21. Антон Степанов (Stepa86) 855 18.04.17 10:15 Сейчас в теме
(20) Проект -> Настройки -> Интеграция. Там внизу искать сервис "custom issue tracker". В ней заполняем примерно так, как приложено в файле. И ставим галку "Active". После этого все указания ссылок типа #123 будут заменены ссылкой https://localhost/Tracker/hs/Tasks/123 . Как подменять произвольный шаблон на ссылку - не нашел.
Прикрепленные файлы:
SerebanSK; +1 Ответить
Оставьте свое сообщение