Меня зовут Андрей Овсянкин. Я автор и мейнтейнер проекта OneScript. Возможно, вы встречали меня на YouTube в видео на канале «Веселый 1С», читали мои статьи на Хабре или Инфостарте, или пересекались со мной в Телеграме.
Сегодня мы собрались не просто так, а по поводу. И этот повод – десятилетие проекта OneScript.
Как-то так получилось, что самый частый вопрос, которые мне задают в кулуарах конференции Инфостарта – это вопрос про предысторию появления OneScript: «Как ты вообще додумался до идеи этого проекта? Почему вообще решил его реализовать?»
Но так как объяснить всю предысторию возникновения проекта на бегу сложно, раз уж есть повод – десятилетие, я готов рассказать про это уже обстоятельно, вспомнив все детали. И ответить на этот самый часто задаваемый вопрос уже на широкую аудиторию.
Как появился OneScript. И почему именно сейчас ему 10 лет
Когда-то давно на одной из моих прежних работ я занимался тем, что собирал релизы одного нашего продукта и публиковал их. Для этого нужно было взять несколько файлов, собрать их вместе, упаковать в архив и положить на сайт. Причем в ряде файлов нужно было в некоторых конкретных местах поставить актуальную дату и поменять номер версии.
Работа очень простая, но при этом кропотливая, нудная и ответственная. Выпустить релиз со старой версией или неактуальной датой в документации – недопустимо.
И что самое противное, все это было завязано на меня. Никто из коллег не хотел этим заниматься – именно потому, что работа нудная и ответственная. И если я уходил в отпуск, релизы не выпускались. Поэтому моей задачей было каким-то образом спихнуть эту работу на коллег.
А желание спихнуть свою работу на кого-то другого – это, как вы понимаете, довольно мощная мотивация.
Но для того, чтобы делегировать эту задачу, мне нужно было сделать процесс выпуска максимально простым.
И я решил, что единственное, что может сработать – это выпуск релизов по принципу «публикация одной кнопкой».
Я подумал: что может быть проще одной кнопки? Должна быть одна кнопка, один портируемый файл, который будет выпускать релиз – подменять даты, модифицировать тексты, упаковывать и публиковать файлы.
-
Первое, что приходит в голову, как сделать такое решение одной кнопкой – это сделать батник. Но батник мне не подходил, потому что батники очень ограничены в своих алгоритмических возможностях – с помощью батника подправить текст внутри файлика я бы не смог. И в целом возможностей батника мне не хватало.
-
Второе, что приходит в голову – написать такой инструмент на 1С. Но 1С не является «решением одной кнопкой»: где-то должна быть прописана информационная база, коллеге, который будет это делать, нужно установить клиент, и предоставить ему лицензию. И вообще – платформа 1С тянет за собой более масштабную инфраструктуру, нежели простой файлик с одной кнопкой.
-
Поэтому мой выбор пал на VBScript – полноценный язык программирования, встроенный в Windows еще с 98-й версии. Скрипты на VBScript запускаются везде и всегда и возможностей у них гораздо больше, чем у батников, а распространять среди коллег их можно просто копированием файла с места на место.
Я взял VBScript и написал на нем большой, хороший и мощный скрипт, который собирал все файлы, подставлял в них нужные данные и публиковал. Я буквально вложил в этот скрипт душу, написал к каждой процедуре большую портянку комментариев – что она делает, зачем и почему. Мне казалось, что теперь-то коллеги точно оценят мои усилия и будут благодарить меня за то, какой классный инструмент автоматизации я для всех сделал.
Но когда я показал коллегам это решение – систему релизов, состоящую из одного файла, который можно положить в любое место и запустить двойным щелчком – я услышал реакцию:
«Это сложно»
Оказалось, что даже один-единственный файл, на который нужно просто два раза кликнуть – это все равно слишком сложно.
И все потому, что для критерия: «Нельзя отмазаться, что не понятно» я упустил один фактор: если надо делать чужую работу, отмазываться будут всегда – даже от одной кнопки.
Например, я услышал такие «отмазки»:
-
«Чтобы этим пользоваться, нужно знать Visual Basic».
-
«Если я захочу доработать, я не понимаю, что оно делает».
-
«Вот если бы это было на 1С, тогда бы…»
Я очень хорошо помню этот момент, когда мой коллега обронил эту фразу: «Вот если бы это было на 1С…» И эта фраза засела в моей голове.
Помните фильм «Начало», где в мозг человека подселяли навязчивую идею, которая впоследствии руководила его поступками? То же самое произошло и со мной.
Почему-то идея сделать Visual Basic Script на 1С не показалась мне в тот момент безумной. Я просто хотел облегчить себе жизнь и выбрал для этого самый «очевидный» способ – написать свой интерпретатор 1С. Это ведь простой и легкий путь для выкладки файликов на сайт, не так ли?
Тем не менее эта идея поселилась у меня в мозгу и начала зреть. Идея консольного приложения, которое можно просто отдать 1С-нику: запускаешь двойным щелчком – и получаешь какую-то околорелизную автоматизацию.
И вот уже 10 лет, как я выращиваю это деревце под названием OneScript, и надеюсь, что оно приносит пользу многим людям в нашей профессии.
Хочется отметить, что 10 лет – это вроде бы большой срок, но пролетел он незаметно. И вообще кажется, что проект молодой, хотя и прошло уже 10 лет.
Но перед тем, как объявить это десятилетие, мне пришлось погрузиться в свои старые архивы и переписки и попытаться понять, с какой даты все-таки начинать этот отчет, и когда именно OneScript отмечает 10 лет:
-
Первая более-менее работоспособная версия была выложена в публичный доступ в мае 2014 года – я тогда собрал все свои закрытые наработки, сделал их наконец-то худо-бедно работающими, выложил в open source и пошел об этом рассказывать на Хабре.
23 мая 2014 года я опубликовал статью с рассказом об этом движке. Эту статью увидел Алексей Лустин – думаю, вы знаете, кто это. Оказалось, что у него та же самая проблема – 1С-ники, с которыми он тогда работал, не хотели девопсить. И что самое интересное, у них были те же самые отмазки: «Это сложно. Мы не понимаем. А вот если бы на 1С…» Мы с Алексеем списались, обсудили наши боли, и по времени так совпало, что как раз в этот период я искал новое место работы. Поэтому он в итоге позвал меня работать в Связной. Положа руку на сердце, это было лучшее место работы в моей карьере. Лучшие коллеги, лучшее время. Связного уже больше нет, но все, с кем мне довелось там работать – невероятно крутые. Связной – это знак качества. Если к вам кто-то приходит наниматься из Связного, можно смело брать – скорее всего, не пожалеете. -
В августе 2014 года я пришел в Связной, и с этого момента движок OneScript стал немного обрастать «мясом». Изначально в нем не было даже доступа к файлам, не было массивов – я же копировал Visual Basic, а там доступ к файлам организован через COM-объекты. Я считал, что этого, в общем-то, и достаточно. Вот COM-классы VB, они хорошие, их много, просто синтаксис языка другой. Но Артур Аюханов, с которым мы вместе работали в Связном, доказал мне, что так не пойдет – нужно реализовать возможности, аналогичные стандартной библиотеке 1С. Поэтому совместно с Артуром и другими коллегами мы начали стабилизировать движок OneScript – в нем появилась стандартная библиотека 1С, нормальный доступ к файлам, совместимое с 1С чтение XML и так далее – этот экспериментальный проект превратился уже в продукт, который стало не стыдно показать людям.
-
31 октября 2014 года я презентовал проект OneScript широкой аудитории 1С-ников – с большой сцены Infostart Event. И именно конференцию Инфостарта и октябрь 2014 года я и решил считать той точкой отсчета для дня рождения, когда OneScript начал свою настоящую жизнь – не как сырая непонятная поделка, а как продукт, который можно запустить для реальных задач автоматизации.
-
И сегодня – октябрь 2024 года (прим. ред.: доклад от 10 октября 2024 года), я снова на сцене конференции Инфостарта и снова докладываю про OneScript. Но на этот раз вы услышите про него не только от меня, но и от других людей, которым он помогает в работе. И мне, как автору, это, конечно же, очень приятно.
Экосистема 1Script. Решаемые задачи и полезные продукты
Сам по себе OneScript – это просто движок, и особой пользы он не несет. По сути, это как платформа 1С, которая без установки на нее конфигурации – просто пустое окно.
Основную пользу для жизни приносит то, что написано на движке OneScript – для этих продуктов существует понятие «экосистема OneScript». Сюда относится набор готовых инструментов, решений, библиотек и компонентов, которые можно повторно использовать для своей работы.
-
В центре экосистемы находится хаб пакетов. Это облачный сервис с открытым кодом, аналог которого вы можете развернуть у себя на предприятии, чтобы публиковать туда уже свои закрытые пакеты. Но основной хаб пакетов, поддерживаемый сообществом – это открытый сайт в интернете, где складываются все пакеты, которые мы разрабатываем.
-
Решения, которые публикуются в хаб пакетов, обязаны быть открытыми – их код должен быть опубликован на GitHub.
-
И есть консольная утилита OPM – OneScript Package Manager – с помощью которой вы скачиваете и устанавливаете себе из хаба эти готовые инструменты.
-
Авторы публикуют свои решения на GitHub, выкладывают их в хаб пакетов, а пользователи через OPM подключают их к себе – все это вместе формирует экосистему OneScript.
Когда я выбирал, о чем из этой экосистемы стоит рассказать, я решил не уходить в космические гиковские штуки. Хотелось сделать доклад не для тех, кому интересны «шашечки», а для тех, кому «ехать надо» – тех, кто работает руками, решает прикладные задачи и хочет уехать с конференции с чем-то реально полезным.
И первый инструмент, о котором хочется упомянуть – наш «старичок» и флагман Gitsync.
Это инструмент, который позволяет перенести ваше хранилище 1С в GIT.
Все эти 10 лет на каждой конференции Инфостарта по 2-3 доклада рассказывают о том, как использовать GitSync. И надо, наверное, уже просто закрыть эту тему и сказать открыто – исходники 1С должны лежать в GIT, потому что только так вы получаете доступ ко всему пулу мировых инструментов для работы с исходным кодом: SonarQube, Jira, все что угодно.
Поэтому – все в GIT. Обязательно пользуйтесь.
Еще один «старичок», который, тем не менее, борозды не портит – это Vanessa Runner.
По названию понятно: «Runner» – это запускалка. Она запускает заранее настроенные типовые действия, которые нужны всем, кто работает с базами 1С. Обновить базу? Пожалуйста. Прогнать тесты? Легко. Выгрузить или загрузить исходники, развернуть базу на сервере, проверить корректность обновления – все это Vanessa Runner делает в несколько строк.
Это универсальный комбайн, там есть все. Причем с ним не нужно вспоминать синтаксис командной строки конфигуратора – все уже упаковано в готовые сценарии: просто четыре строчки пишешь, и у тебя выполняются те или иные DevOps-действия.
И именно Vanessa Runner выступает в роли «движка» для следующего инструмента, о котором я хочу рассказать. Это библиотека для сервера Jenkins – Jenkins Lib под авторством Никиты Федькина.
Я бы сказал, что это квинтэссенция всего накопленного сообществом опыта в части выпуска релизов 1С. Все наработки по тестированию, проверкам, сборке релизов и прочему – заботливо собраны и упакованы в удобную для использования библиотеку. Это не просто набор скриптов из GitHub, а настоящий продуктовый подход с заботой о пользователе, что очень классно.
С Jenkins Lib ваш релизный цикл начнет выглядеть так, как на картинке: хотите прогнать тесты сначала одним фреймворком, а потом другим – без проблем, хотите загрузить или выгрузить расширение – просто отмечаете галочками нужные действия, и все начинает работать.
Это шикарнейшая библиотека, и начать ее применять очень легко.
Конечно, про весь хаб пакетов я рассказать физически сейчас не успею, но еще у нас есть:
-
Автоматическая скачивалка релизов yard – вам не нужно больше заходить на сайт 1С и вбивать там пароль для скачивания типового релиза. Как только выходит новый релиз, она его вам скачает и аккуратно положит в правильную папку.
-
Автогенератор документации autodoc-gen.
-
ORM-фреймворк для баз данных entity.
-
Компонентный фреймворк ОСень (autumn framework) для написания сложных компонентных приложений. У него классная, и местами очень веселая документация – хотя бы ради нее вам стоит ознакомиться с этим фреймворком.
-
Веб-фреймворки – winow и OneScript.Web.
-
Телеграм-боты.
-
Средства тестирования и т.д. – чего у нас только нет…
Поэтому приобщайтесь, пожалуйста, к экосистеме OneScript.
В конце октября 2024 года я планирую выпустить релиз-кандидат 5 версии OneScript 2.0 – будущее OneScript.
Что это за версия и почему на нее стоит перейти:
-
В OneScript 2.0 используется современная платформа .NET – она более быстрая и более безопасная.
-
У OneScript 2.0 самодостаточный пакет поставки – вам не надо ставить отдельно на сервер правильную версию .NET, выяснять какая же правильная. Вы просто скачивайте, и все работает из коробки – .NET уже включен внутрь.
-
Там есть режим компиляции Native – это экспериментальный режим, который позволяет компилировать код 1С в байткод машины .NET. Это значит, что код на 1С начинает выполняться со скоростью C# – очень быстро. Не весь код 1С портируется в такой режим, но если уметь, можно так делать.
-
И версия 1.x после выхода 2.0 будет поддерживаться только для исправления ошибок – я планирую, что сообщество будет переходить на версию 2.0.
Люди, которые сделали 1Script. Те, без кого бы не получилось
Теперь я хотел бы уделить несколько минут людям, которые позволили OneScript состояться – без них он бы так и остался никому не нужной подделкой на Хабре.
Первый человек, которого я хочу поблагодарить – это Сергей Батанов.
Именно благодаря Сергею я не забросил проект в самом начале, когда он был еще скорее поделкой. Потому что он пришел и принес пуллреквест с реализацией таблицы значений по аналогии с 1С. А это не самый маленький класс – это полновесная доработка не такого уж простого механизма. Именно этот пуллреквест вдохновил меня на продолжение работы над проектом.
Потом мы с ним много чего еще совместно доделывали. Поэтому Сергей – полноценный и полноправный соавтор движка.
Следующий человек, которого я хочу поблагодарить, пожалуй, не нуждается в представлении – это Алексей Лустин, демиург опенсорса и девопса в 1С, человек, который продвигал все эти девопс-фишечки в 1С и очень многому меня научил.
Алексей активно продвигал OneScript, активно его рекламировал, ездил с ним, рассказывал, показывал, убеждал. Без его харизмы и пробивной силы, наверное, тоже ничего бы этого не было.
Возвращаясь к экосистеме OneScript, стоит отметить, что значительная ее часть – пожалуй, больше половины – написана еще одним человеком, которого вы наверняка знаете. Это Никита Федькин.
Практически все, что касается экосистемы – это творение рук Никиты. Он реализовал пакетный менеджер, утилиту установки версий OVM и обвязку всего того «атома», который я показывал до этого.
Я устану перечислять, сколько всего написал Никита в библиотеку OneScript Library. Все самые драйвовые и кайфовые инструменты – типа фреймворка работы с базами данных и ОСени – все это выросло на плечах Никиты.
А главное – с Никитой очень приятно работать. Спасибо ему за время, проведенное в креативе и драйве, энтузиазм и дружеское плечо в любой ситуации.
И еще один человек, которого я хочу поблагодарить – это Артур Аюханов.
Когда я пришел в Связной, HR, которая проводила начальное собеседование, с гордостью сказала: «А еще у нас работает Артур Аюханов». И это было сказано с блеском в глазах – настолько сильно имя Артура ассоциировалось с качеством, экспертизой и авторитетом.
Артур – это имя, это бренд. А еще, Артур – очень хороший друг. В Связном он сделал систему тестирования движка OneScript, которая живет до сих пор. Именно она обеспечивает стабильность движка, которому теперь не страшны ни горе, ни беда. Он надежен как скала, и все благодаря Артуру.
Итоги 10 лет
Подведу юбилейные итоги – каких результатов мы достигли за 10 лет развития OneScript и сообщества вокруг него.
-
Первое, чему я особенно горд – это то, что мы создали отрасль DevOps внутри сообщества 1С. OneScript – это уже не просто эксперимент или игрушка энтузиастов. Это – сформировавшаяся подотрасль, которая признана в сообществе. Она состоялась. Это данность, это факт.
-
Второй приятный итог и важное достижение – то, что OneScript используется крупным бизнесом федерального уровня. Нашим движком пользуются топовые банки (из топ-5), большой ритейл, маркетплейсы, и это подтверждает его надежность и правильность его применения у себя на работе.
-
OneScript стабильно упоминается в вакансиях для 1С-ников, и его знание для DevOps в 1С является преимуществом при трудоустройстве. Это немаловажный повод изучить этот механизм.
-
И главное, что мы достигли – у нас живое и активное комьюнити. И оно не затухает со временем. Мы уже 10 лет бурлим, спорим, рассказываем, доказываем. Постоянно появляются новые инструменты. Недавно появился клевый и веселый веб-фреймворк Winow. Появилась ОСень. У нас классная движуха, и это тоже повод вливаться. Вливайтесь, пожалуйста!
Вопросы и ответы
У OneScript под капотом C# и .NET. Но многие создатели языков вначале пишут, например, компилятор на C, а потом делают компилятор на самом языке. Не было ли у вас планов сделать компилятор OneScript на OneScript?
Я хоть и выгляжу как энтузиаст, но я все-таки из тех, кто не любит работу ради работы. Я все-таки про пользу. Конечно же, можно это сделать. Вопрос зачем? Я что, должен сейчас сесть и всю кодовую базу, которая делалась 10 лет, переписать на другой язык? Просто чтобы кайфануть? Нет, я от этого не кайфану, я устану.
Но тогда у 1С-специалистов появится возможность пушить в ядро OneScript'а на 1С.
Это абсолютно ложное утверждение. Стандартная библиотека C# – практически то же самое, что и 1С. Там все классы очень похожи на 1С, только называются по-английски.
Это самообман, что что 1С-ник не способен выучить C# и что не-1С-ные языки – это сложно. Учите, это несложный, легкий и приятный язык.
Вы упомянули, что тенденция к применению DevOps сейчас в целом растет. И хотя в 1С это пока скорее новшество, для всего остального мира разработки DevOps уже давно норма и единственный возможный путь развития. Так вот вопрос. Крупные компании, особенно с госучастием, сейчас активно переходят на импортозамещение. И, например, из-за зарубежного происхождения Git сейчас многие отказываются от классических DevOps-подходов, используя это как аргумент. Считаете ли вы, что эта проблема актуальна?
Во-первых, DevOps в 1С – это не новшество. Только OneScript занимается автоматизацией DevOps в 1С 10 лет. А средства автоматизации сборки релизов существовали гораздо раньше. На каждой конференции Инфостарта про это рассказывают. Кто еще не начал это применять, тот лузер. У того работать скучно. От него уйдут все топовые разработчики и будут правы.
По поводу Git. Во-первых, это не западный продукт как таковой, это open source – общечеловеческий продукт. Это не проприетарное принадлежащее некой корпорации решение, которая может в один момент дернуть рубильник и госкомпания встанет. Git – это открытая история. Но для того, чтобы его можно было использовать в госкорпорации, наверное, какие-то есть юридические тонкости. Возможно, нужно сделать форк Git, назвать его как-нибудь по-русски и сертифицировать. Я сейчас не силен в юридических тонкостях. Но это точно не препятствие.
Вопрос по версии 2.0. Скорее всего, эта версия принесет что-то новое. Но будут ли на ней работать уже написанные для 1.х скрипты, либо будут какие-то ограничения и необходимость конвертации?
Цель именно в том, чтобы старые скрипты не надо было переписывать – чтобы все продолжало работать.
И если вдруг что-то будет ломать обратную совместимость, это будет какая-то специальная переключалка или что-то в этом духе.
Но неосознанный слом, наверное, может происходить – когда из-за какого-то бага в коде то, что работало на 1.х, не заработает на 2.0. Но это просто баг, который нужно будет исправить.
Я был одним из первых, кто еще в 2014-м году загорелся идеей использования OneScript. Но тогда же я столкнулся с проблемой – случайно забыл прописать параметр пути в команду, и это каким-то образом снесло на терминальном сервере заголовок файловой системы. В итоге мы все восстановили, но меня эта ситуация настолько потрясла, что я до сих пор эту идею забросил. «Стреляли ли вы себе в ногу» своим же продуктом в процессе его разработки или использования? Как вы тестируете свой продукт на безопасность? Были ли у вас с этим какие-то проблемы? Потому что DevOps-система автоматизации работы, в том числе, должна быть безопасной.
Такого, чтобы полностью снести дескрипторы файловой системы скриптом – я не представляю, как это можно сделать даже специально, не говоря уже о случайно. У меня такого не было.
Тестирование у нас ведется – как юнит-тестами, так и интеграционными тестами, которые делал Артур. Они гоняются на публичном CI-сервере. Тестов там больше тысячи штук. Но, конечно же, нет предела совершенству.
Тестирование на безопасность и на невзламываемость – пентесты и DevSecOps – не ведется. Если вы хотите это привнести, то приходите, привносите. Но OneScript – это и не сервер, который торчит в интернет. Это скриптовый движок. Что там нужно тестировать на безопасность – не очень понятно. Но если вы знаете что, приходите с идеями и делитесь.
А так юнит-тесты гоняются постоянно – на каждый коммит, на каждую ветку. Если что-то падает, это сразу видно.
*************
Статья написана по итогам доклада (видео), прочитанного на конференции INFOSTART TECH EVENT.