Немного о личном
ГК «Невада» занимается дистрибьюцией, оптово-розничной торговлей. У нас сеть гипермаркетов и сеть минимаркетов по всему Дальнему Востоку.
Так уж получилось, что я человек с двойной должностью. С одной стороны я архитектор, с другой стороны – руководитель группы разработки.
С чего все начиналось
Еще в 2024 году по просьбе сообщества в версии платформы 8.3.6 появилась очень полезная штука – выгрузка конфигурации в файл, а вместе с этим и выгрузка внешних обработок, отчетов. Когда появились расширения, их тоже стало можно выгружать. Все это с целью возможности версионирования кода в системе контроля версий.
Но чуть раньше, еще в августе 2014 года, всеми нами уважаемый Алексей Лустин проводил вебинар на тему «Git-flow в 1С». Кто-нибудь видел этот вебинар? А кто уже перешел на Git, вообще пользуется им? А есть такие, кто еще думает переходить на Git? Или может быть только-только начал? Отлично, это я удачно зашёл.
Почему не взлетело
Почему чуда не произошло, и до сих пор лишь малая часть коллег пользуется Git. Кто-то думает, что слишком высокий порог вхождения. Я много слышал различных возражений от коллег-разработчиков и от менеджеров разных уровней. Самые популярные из них представлены на картинке.
В ходе своего доклада я постараюсь развеять эти сомнения.
Что такое система контроля версий
Для начала рассмотрим, что такое система контроля версий. Не все еще начали ею пользоваться. Это некое мероприятие или комплекс мероприятий, который позволяет нам ответить на следующие вопросы:
-
что и когда менялось;
-
кем менялось;
-
с какой целью.
Многие из вас, держу пари, пользовались системой контроля версий в той или иной мере.
-
Например, существует такое понятие, как локальная система контроля версий. Для меня это какие-то сетевые или локальные общедоступные файлы, папки. В их названии может фигурировать дата, время, какое-то краткое описание версий. Это ничто иное, как локальная система контроля версий.
-
Но когда речь заходит о том, чтобы с этими данными работало больше одного человека, на арену выходит понятие централизованной системы контроля версий. Классический пример ЦСКВ – наше любимое хранилище конфигураций. Данные, которые хранятся где-то централизованно на сервере, сервер управляет каким-то образом раздачей доступа, предоставляет возможность редактирования данных нескольким разработчикам.
Недостатки локальных и централизованных систем контроля версий
Главный недостаток как локальных, так и централизованных систем контроля версий – это их ненадежность. Если у нас что-то случится с данными, мы потеряем данные на сервере, мы потеряем сразу все, если не позаботимся о дополнительном бэкапировании этих данных.
С хранилищами тоже происходит много казусов: ошибки SDBL, ошибки целостности баз данных… И пока хранилище не починится, работа группы стоит, разрабатывать невозможно, захватить объект невозможно. Создаётся масса неудобств.
Преимущества распределенной системы контроля версий Git
В чем прелесть распределенной системы контроля версий, коей как раз является Git?
На картинке я попытался представить, как это выглядит. Это полностью распределенная система, в том смысле, что все данные, включая всю историю работы с этими данными, находятся абсолютно у каждого участника проекта, который подключен к репозиторию. Данными можно обмениваться как с сервером, так и с другими участниками проекта.
Но в чем прелесть Git? Работать можно локально и не обязательно иметь постоянное подключение к сети Интернет. Даже если вы улетите в космос, вы можете продолжать коммитить на своём ноутбуке. А вернувшись на землю, подключиться к интернету, синхронизироваться с сервером и радоваться актуальной версии вашего проекта.
Поговорим о преимуществах. Когда я работал архитектором в группе ЗУП, мне доверили архитектурировать еще одну конфигурацию – внедренный готовый проект. У нас есть такая служба, как служба проектов, которая умеет быстро внедрять красивые и интересные проекты, а потом передают их на поддержку архитекторам в службу разработки. Мне один такой проект достался. Он, действительно, был красивый: красивый интерфейс, формочки, кнопочки красиво работают. Но фишкой этого проекта было то, что он разрабатывался без поддержки архитектора. И то, что находилось внутри, никто не контролировал. Как только появилась необходимость вносить новый функционал в эту конфигурацию, естественно она оказалась неустойчивой, сразу полезли технические долги, ошибки. Стоимость сопровождения такой конфигурации резко возросла. Пришлось дополнительно брать на себя обязательства по контролю и рефакторингу всей системы.
К чему это я? К тому, что Code Review или инспекция кода, контроль чистоты архитектуры – это обязательная операция, которая должна присутствовать в вашей работе. Особенно если вы работаете с группой разработчиков, особенно если вы работаете в крупной корпорации.
В хранилище конфигураций есть для этого определенные инструменты, и хранилище само продолжает развиваться. На слайде вы можете посмотреть схему поиска изменений в одном из модулей. Именно так это выглядит при работе с хранилищем конфигураций.
Как только становится задача чуть посложнее, например, исследовать происхождение какой-то ошибки или историю возникновения строки кода и ее изменения во времени, то такая задача становится трудоемкой, если вообще возможной. При работе с хранилищем конфигураций это занимает достаточно много времени. Достаточно вспомнить сравнение двух версий из хранилища в какой-нибудь ERP, когда мы просим поднять интересующую версию из хранилища и сверить ее с текущей. Пошли, несколько часов попили кофе, приходим и обнаруживаем, что взяли не ту версию из истории. Такие случаи у нас тоже были. Потеря времени – это очень неприятно, хочется, чтобы всё работало быстро.
И тут нам на помощь приходит Git. Это консольная программа, но для того, чтобы приобщить к ней огромную армию пользователей Windows и нас, специалистов 1С (мы ведь тоже не любим консольные программы, не любим командную строку, мы любим на кнопочки нажимать), было разработано огромное количество всяких графических оболочек, которые представляют информацию в таком красивом виде.
На слайде выше – фрагмент главного окна моего любимого SourceTree. Сразу видно, кто, когда и куда помещал изменения, в рамках какой задачи, зачем, комментарий, что там поменялось, вплоть до строки кода.
Git позволяет такую информацию получать достаточно быстро, я бы сказал мгновенно.
Говоря о преимуществах Git, мы возвращаемся немного в историю его происхождения. Когда Линус Торвальдс в 2005 году дал задачу разработать систему контроля версий, ключевыми требованиями были:
-
производительность;
-
возможность работы большого количества разработчиков (больше тысячи разработчиков);
-
высокая скорость работы.
Все эти цели были достигнуты.
Скорость работы. Git, действительно, позволяет получать любые отчеты практически мгновенно при анализе истории из данных, чем не может похвастаться хранилище.
Ветвление разработки. В хранилище мы знаем, что коммиты у нас происходят строго линейно, и когда мы собираем релиз, то выколупать доработки определенных задач или подзадач становится проблематично. У нас был такой инцидент, когда в нашей основной товаро-учетной системе накопилось очень много ошибок. На их устранение подключили целую армию программистов. Было очень много фиксаций в хранилище конфигураций, и мы зашли в тупик с вопросом: «А что же делать со всеми этими задачами? Кто их будет тестировать? Армии тестировщиков нет!».
Решили, что надо их как-то ранжировать по приоритетам, протестировать немного в другой последовательности, нежели они были закоммичены в разработку, и пустить в релиз. Как это сделать с хранилищем? Никак!
Были, конечно, приняты определенные управленческие решения: что разработчики сами должны следить за порядком, брать на себя функции тестирования и так далее. Но это уже вопрос десятый.
Другое дело, когда мы говорим о работе с Git.
Я не зря на предыдущем слайде показал именно этот фрагмент нашего репозитория. Это огромная пачка фич, которая стекается в ветку develop – не что иное, как одна пачка задач, которые сделали несколько разработчиков и одновременно послали pull request в основной ствол разработки. В любой момент эти задачи можно было принять и отправить в продакшен. Очень удобно. Да, Git позволяет управлять именно такой очень гибкой и удобной системой ветвления.
Детальная история. Я про нее уже упомянул.
Версионирование внешних файлов. Возможность версионировать, помимо конфигурации, любые внешние файлы, которые прямо или косвенно связаны с нашим проектом – это, пожалуй, моя самая любимая фича Git. Это не только внешние обработки, печатные формы, которые, как я уже сказал, тоже раскладываются в исходники. Это любые файлы, которые, так или иначе, можно представить текстом. XML-файлы (те же правила обмена), какие-то настроечные JSON-файлы, скрипты, написанные на чем угодно. Добавляете в свой проект в отдельные папочки, настраивайте структуру хранения этих папок, а за историей версий следит сам Git. Вам только остаётся почаще делать коммиты.
Немного холивара
Представлю плюсы и минусы Git и хранилища, о которых чаще всего мы сами говорим или слышим от наших коллег.
Порог вхождения. Так уж получилось, что у наших коллег сложился обманчивый стереотип, что Git – это что-то сложное, неизведанное, какая-то непонятная система, на которую нужно потратить время, чтобы ее изучить и понять. Этот стереотип мы обсудим чуть позже. В конце доклада я сделаю вам небольшой подарок.
Возможность параллельной работы с объектом, то, как работать с объектом – это самое популярное возражение сторонников хранилища. Здесь мы приходим к тому, что при переходе на Git, мы принимаем на себя иную культуру работы с кодом. Если раньше мы не задумывались о том, какие изменения мы вносим, как они повлияют и будут коррелироваться с изменениями других разработчиков, то теперь, работая с Git, параллельно дорабатывать один и тот же модуль может хоть сотня разработчиков. Но при слиянии кода перед нами встает задача дополнительно проанализировать конфликты и принять решение о том, какие изменения в каждой строке кода мы принимаем для того, чтобы в продуктиве получить то, что мы хотим получить. Здесь на передний план выходит та самая пресловутая операция Code Review (инспекции кода), которая для нас становится неизбежной частью процесса разработки. Те, кто начинает работать с Git, думает, что это плохо, что это неудобно, что это дополнительные трудозатраты. Но это хорошо, потому что это повышает качество вашей разработки и, в конце концов, откликается снижением себестоимости строки кода. Это та самая «чистая архитектура», о которой писал Роберт Мартин.
Open Source – вишенка на торте. Если у вас есть какой-то интересный проект, стартап, которым вы хотите поделиться с сообществом и желаете, чтобы в ваш проект коллеги со всего мира (да что там мира, России!) вносили изменения и добавляли полезную функциональность, то welcome на GitHub. Выкладывайте свои разработки и добро пожаловать в мир Open Source.
Как начать работать с Git
Ну что, появилось желание пощупать Git?
Подумаем о том, где и какие инструменты мы будем использовать, и как вообще можно выстроить работу нашей группы при использовании Git.
В своем прошлом докладе я подробно рассказывал про работу в группе с хранилищем конфигураций. Неважно, какую схему вы выберите (одно, два или три хранилища), но если у вас версия платформы ниже 8.3.6 или вы работаете с обычными формами, то вам ничего не остаётся, кроме как продолжить использовать хранилище.
Есть интересный подход, который выложен на ИТС, – это разветвлённая система разработки с использованием хранилищ, которая очень напоминает Git-Flow, реализованное на хранилищах. Поэтому если у вас нет возможности использовать Git, но хочется попробовать схему Git-Flow, можете попробовать эту схему.
Если же вас не ограничивают возможности платформы, то самое время попробовать Git.
Как его начал использовать я? И один из вопросов, который мне задали в кулуарах, – начиная с какого количества разработчиков стоит начать использовать Git? Отвечаю: от одного. Я начал пользоваться Git сам для себя. Начал с того, что запушил в репозиторий шаблоны текстов кода, которыми я активно пользуюсь. Мне показалось это очень удобным, и я решил подключить к этому свою группу разработки. Мы добавили туда внешние отчеты, обработки и расширения конфигурации, потом правила обмена.
На сегодняшний день внедряем автотесты – feature файлы хранятся в том же репозитории, что тоже очень удобно, потому что сразу видно, какая фича в рамках какой задачи и с какими модулями одновременно была доработана.
Дальше — больше: всё, что прямо или косвенно касается этого проекта, добавляется в Git. Ничего не теряется. Более того, после того как мы начали использовать Git, освободилось много времени на действительно полезную работу. Голова и руки освобождаются от необходимости следить за версиями, мучиться вопросами, что куда положить, как хранить. Все это на себя успешно берет Git.
Конфигурацию тоже можно разложить в Git. Здесь у нас набор инструментов oscript-library, который до сих пор очень успешно используется даже на крупных проектах.
И конечно же – это для кого-то любимый, для кого-то ненавистный инструмент EDT, вокруг которого сейчас ходит много споров. Лично я смотрю на его развитие очень оптимистично, и верю, что в скором будущем мы получим тот долгожданный релиз, когда можно будет в EDT эффективно работать даже с очень крупными проектами.
Что нужно, чтобы начать?
Нужно понизить порог вхождения в Git. Чтобы он не казался таким страшным и непонятным для наших коллег, я решил опубликовать на Инфостарте серию статей о том, как подключиться к команде, какой софт поставить, как его поставить. Там всё это очень подробно расписано. Если вы задумываетесь о том, чтобы начать использовать Git, пользуйтесь этой информацией.
Спасибо!
***************************************************
Данная статья написана по итогам доклада, прочитанного на конференции INFOSTART EVENT 2024 EDUCATION. Больше статей можно прочитать здесь.
В 2024 году приглашаем всех принять участие в 7 региональных митапах, а также юбилейной INFOSTART EVENT 2024 в Москве.
Расскажите как это происходит? Это обучение молодых сотрудников?
Какой регламент этой операции (каждый день или раз в неделю)?
(2)Ну почему… Лично у меня есть пара-тройка примеров успешных разработок с совершенно обычным хранилищем конфигураций. Даже без сервера…. Дело не в инструменте, а в организации
(3) вы не один такой
Гит, гит, гит, я ахитектор, я архитектуру архитектуру! Статья сплошная вода.
(4) вы и не два такой)
— На создании прототипов и первых версий продуктов редко используется большая команда.
EDT нативно работает с гитом.
Все здорово, но где мне как единственному разработчику, работающему с конфигурацией 1С, прочитать про конкретные шаги по работе с Git? Я лично столкнулся с рядом существенных проблем, решить которые помочь мне так никто и не смог — все отправляют учиться и читать. Вот примерная последовательность действий, которая у меня приводит к неутешительным результатам:
1. Завел репозиторий в bitbucket.
2. Клонировал этот репозиторий на локальный диск.
//вообще только начинаю общаться с системами контроля версий, работаю один, показалось интересным контролировать все стадии доработок и не держать в голове кучу информации.
3. В папку, которая локальная копия репозитория выгрузил конфигурацию в файлы через «Конфигурация — Выгрузить конфигурацию в файлы». То есть была создана структура каталогов с файлами xml, bsl и прочими.
//конфигурации пробовал разные. Сильно переписанную УТ, Розницу, БП2
//при выгрузке конфигурация часто ругается на длинные имена файлов и длинные имена каталогов. Игнорирую. Так как если с каталогами я еще что-то могу поделать, то с именами файлов на данном этапе своего развития — нет.
4. Далее делал первоначальную синхронизацию локального каталога с облаком и тянул в облако все гигабайты выгруженных файлов.
5. Дальнейшая разработка влекла за собой повтороные инкрементные выгрузки (как я понял сама платформа по записям в служебном файле контролирует что изменилось и выгружает) и обмен с облачным репозиторием. Все изменения в модулях bsl видел. Про синхронизацию изменений (возможно проблемную) форм услышал только на форуме и даже боюсь пока об этом думать. Как решать такие коллизии если возникнут пока не знаю.
6. Проблемы начались при попытке загрузки. Дорабатывал УТ. Все пункты с 1 по 5 делал дома, после возникла необходимость доработать на рабочем комьютере. Клонировал облачный репозиторий на локальный компьютер, попробовал загрузить из файлов «Конфигурация — Загрузить конфигурацию из файлов» и начал получать ошибки. Первый вариант — некая ошибка в xml, подробно не вспомню, но что-то про неуникальное имя. Второй вариант — загрузка проходит, но конфигурация становится пустой, пропадают все объекты…
Если брать работу с обработками — там вроде все более или менее понятно. Вместе с текстовой информацией из файлов обработки можно синхронизировать также сам файл обработки. Но тут вопрос. Если мне надо перейти на версию обработки с ветки №6 из десяти веток — epf тоже версионируется при синхронизации или нет? Подозреваю, что нет.
А вот с конфигурациями совсем не понимаю. Концептуально не понимаю. Вот выгрузил я конфигурацию в файлы. Каждая ветка имеет некие доработки в неких файлах и если мне надо перейти/вернуться на определенный этап разработки — как это сделать? Что-то читал про «автоматическую сборку cf из файлов, но так и не нашел как и что. Или я в принципе неверно работаю? Хранилищем конфигурации не пользуюсь в принципе, так как не знаю, что это такое.
Сумбурно, но это суть проблемы. )
Забыл. Бинарные файлы, как мне сказали, с Git не версионируются.
А где «другие технологии групповой разработки»? Надо или переименовать статью, или добавить их всё же.
(8)Да, очень сумбурно. Ну да ладно…
Если вы единственный разработчик на конфигурации и разрабатываете различные задачи строго последовательно, то, возможно, вам и хранилища будет за глаза, и использовать вы его будете исключительно для сохранения истории изменения отдельных объектов конфигурации. А то и хранилище не нужно…
Для чего? Чтобы гонять разработку из дома в офис и наоборот? Для этого существует удаленный рабочи стол, не нужно ничего таскать туда-сюда да еще через облако…
Опять же увидел: БП2. То есть пытаетесь прикрутить Git к обычным формам? Такое себе, хотя теоретически возможно…
Если конфигурация на УФ, есть команда или разработка нескольких задач ведется параллельно одним разработчиком (а смысл? работайте по приоритетам), плюс частые хотфиксы и мелкие доработки, то Git, конечно же, рекомендован.
Для всех остальных случаев попробуйте для начала использовать хранилище конфигурации. Оно работает и для расширений, в которых можно хранить внешние отчеты и обработки для целей контроля версий через хранилище. Это несколько извращенно, но можно…
Попробуйте поработать именно с хранилищем. Потом, возможно, поймете — а нужен ли Git вам вообще?..
Если аппаратные ресурсы позволяют (хороший проц, много памяти и диск SSD) можно начать знакомство с Git из EDT. Встроенный функционал Git’а в EDT вполне работоспособен. Но тут только конфигурации на УФ.
Если разработчик один — да не нужно вам облако! Хватит локального репозитория и удаленного рабочего стола, если работаете из нескольких мест. Локальный репо можно бэкапить как простую папку…
Если таки сильно нужно (несколько разрабов) — можно развенуть Git-сервер в локальной сети (какой-нить Bonobo гит-сервер)
Но для начала — хранилище… Это несложно. Сделайте для хранилища папку локально или в шаре. Поместите конфигурацию в хранилище из конфигуратора. Далее захватывайте отдельные объекты, редактируйте и помещайте назад в хранилище. Подключаете другую конфу (у другого разраба или боевую базу) — все изменения автоматически применятся к этой конфе. Можно относительно безболезненно обновлять конфигурацию из хранилища и т.п.
(9) Например:
(10)
Если таки сильно нужно (несколько разрабов) — можно развенуть Git-сервер в локальной сети (какой-нить Bonobo гит-сервер)
Но для начала — хранилище… Это несложно. Сделайте для хранилища папку локально или в шаре. Поместите конфигурацию в хранилище из конфигуратора. Далее захватывайте отдельные объекты, редактируйте и помещайте назад в хранилище. Подключаете другую конфу (у другого разраба или боевую базу) — все изменения автоматически применятся к этой конфе. Можно относительно безболезненно обновлять конфигурацию из хранилища и т.п.
Это понятно. Просто хочу изучит md кратчайшие сроки технологию групповой разработки, возможно впоследствии получится поменять текущий вид деятельности на 1С, а работать в команде не умею. И на обучение, боюсь, работодатель времени не даст.
Если у меня в работе 7+ конфигураций — работать с 7+ хранилищами для разных конфигураций? Я когда пробовал с СКВ работать визуально нагляднее показалась работа с несколькими различными репозиториями.
Понравилась идея с локальным репозиторием для одного меня. С удаленным рабочим столом — тоже вопрос интересный. На работе все данные хранятся локально, после окончания рабочего дня все обесточивается и подключиться возможности нет…
Надо же, именно сегодня обработка в темуhttps://infostart.ru/public/1147220/
(7) только с сам edt нифига не нативный и очень тормозной
(12)
Я так думаю, что в большинстве случаев в командах, в которых реально поставлен процесс групповой разработки, используются исключительно четкие инструкции по следованию этому самому процессу и от «умения» или «неумения» работать в команде будет мало что зависеть. Понимать, чего требуют эти инструкции, это да — было бы неплохо. Но скорее всего сходу и необязательно… Просто выполнять их для начала.
Обучение сведется к инструктажу и все.
Количество хранилищ может быть и больше количества конфигураций. Например, если вы еще и расширения версионировать будете. Это не так ужасно, как вы себе, возможно, представляете… «Выхлоп» от использования хранилищ, если вы ранее их не использовали, однозначно положительный. Хотя бы процесс заливки изменений в боевую базу или базу для тестов с разных баз разработчиков уже будет намного более простым. Просто нужно начать с хранилищем работать…
Если работодатель заинтересован в вашей работе в нерабочее время, то, думаю, в его интересах обеспечить необходимые для этого ресурсы типа удаленного рабочего стола и т.п.
Если «в этой конторе все сложно!», как иногда бывает, то точно вы на верном пути в плане смены вида деятельности и(или) места работы…
(8) привет! ничего сложного там нет, нужно просто осознать некоторые ограничения… если ещё не разобрались и если ещё нужна помощь — напишите в личку — от получаса до часа и всё взлетит (как минимум — проЯснится)