DevOps для Плейстоцена. Скрещивание обычных форм толстого клиента с практиками CI/CD

27.02.23

Разработка - DevOps и автоматизация разработки

Плейстоцен — эпоха четвертичного периода, начавшаяся 2.588 миллионов лет назад и закончившаяся 11,7 тысяч лет назад. В 1С этот период характеризуется обычными формами, использованием толстого клиента и вызовом «Предупреждение» без таймаутов прямо из модулей проведения документов. О том, как внедрять инженерные практики для огромного монолита легаси и тестировать функциональность без менеджера и клиента тестирования под разными пользователями, на конференции Infostart Event 2021 Moscow Premiere рассказал ведущий программист компании BCS FinTech Сергей Голованов.

 

Меня зовут Сергей Голованов, я программирую с 11 лет – очень давно, сколько себя помню.

Начинал программировать с калькулятора МК-52 – если кто такой знает, у того уже должно было олдскулы свести.

Лет в 15 обзавелся компьютером ZX Spectrum. Довольно быстро перешел там от игр к бейсику, а потом к ассемблеру. Собственно, оттуда все завертелось.

Диплом, как, наверное, большинство моих одногодок, я писал на Delphi.

В начале двухтысячных немного программировал под Linux на C++. Такое, конечно, нельзя людям показывать. Но оно работало.

Несколько лет назад прошел курсы по C#. И пару лет назад еще прошел курсы по Java на Stepik – это мне помогает писать диагностики для SonarQube.

И все это время – уже больше двадцати лет - с 99 года, как я начал работать, меня кормила 1С. Я на ней начинал с 7.5, потом с 7.7, потом сразу перешел на 8.3.

Получается, что с 1С у меня около 20 лет опыта, и около 10 лет опыта администрирования, потому что когда я начинал работать,  нужно было уметь все – и картриджи заправлять, и vpn-туннели настраивать, и веб-серверы, и почтовые серверы.

И вот теперь на синтезе этого опыта мне достаточно комфортно ехать в DevOps – про это сегодня как раз и будет доклад.

 

Технический плейстоцен

 

В 2018-м году я пришел в компанию БКС – это один из крупнейших брокеров в России. Компании 26 лет.

Системе бэкофиса компании, написанной на 1С, конечно, не 26 лет, но где-то, наверное, близко к этому. То есть когда всё это писалось, мы еще не знали, что мы – инженеры бизнес-приложений. Не знали, что нам нужна спираль DevOps и постоянное улучшение. Никто про это ничего не знал, никто даже и думать не думал про какое-то автотестирование. Писалось по тогдашним меркам, круто, в конфигурации есть достаточно крутые модули, интересно сделаны. Но по современным практикам то, как оно написано – это плейстоцен.

 

 

Прикрутить ко всему этому практики CI/CD – это как к динозавру приделать пулемет и научить им пользоваться. И еще чтобы он стрелял только того, кого надо. Выглядела эта задача просто нерешаемо.

  • На тот момент в нашем бэкофисе было около 1,2 миллиона строк.

  • Очень специфический highload, потому что обычно под хайлоадом понимается работа тысячи пользователей, которые пытаются что-то одновременно писать в базу, у них там всякие блокировки, и вот это все. У нас такого практически нет. Но у нас есть несколько видов биржевых документов, которых в день в базу льется порядка 5-7-10 миллионов. Это нужно все обсчитывать, проводить каким-то образом, считать, сколько мы там денег с кого должны снять. Специфика есть своя.

  • У базы специфический старт – ее нельзя так просто взять и запустить. У нее есть определенное окружение, его нужно тоже настраивать. Это делают QA-специалисты – они запускают все эти тесты.

  • Специфическая работа с метаданными – человек, который у нас отвечает за весь проект, он знает буквально каждую табличку, каждый индекс – какого размера он должен быть, где как лежать, как часто обновляется статистика. Поэтому убедить его, что в базу нужно добавлять какую-то еще табличку– придется аргументированно объяснять, что нужно что-то завести. Из-за этого у нас небольшая конфигурация, это нам помогло очень.

  • Тридцать два глобальных модуля. Когда писалось – наверное, это было модно. Но из-за этого у нас «из коробки» не работает ни одна Ванесса. То есть, если взять Ванессу из интернета, попытаться запустить на наших базах, она пересекается по названиям функций глобального контекста и не работает. Говорит, что функция с таким именем уже есть, и все, до свидания.

  • Плюс еще у нас есть регулятор – Центробанк. С ним очень все строго – очень серьезные санкции, если мы что-то вдруг сделаем не так.

  • И поэтому засилье инфобеза, они могут сказать: «Нет». И все, и нет. Например, у нас запрещен запуск чего бы то ни было из временного каталога пользователя на наших компьютерах. Соответственно, если кто знает, как работает Ванесса – она формирует батничек, складывает его во временный каталог пользователя, потом оттуда его запускает. У нас это не работает.

Вот такая вот картина у нас была. И мы, смотря на это, пошли в вере, что сможем прикрутить ко всему этому новые технологии.

 

Как приходит DevOps в компанию?

 

Есть ребята, которые приходят в компанию и приносят Agile: «Вот сейчас мы вам сделаем хорошо».

DevOps примерно так же приходит, но он приходит еще и с инструментами.

Какие инструменты мы привнесли людям?

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

Но мы добавили новые инструменты.

 

 

Понятно, что первый инструмент – это Git.

Это основа: «без Гита и жизнь не та». Это – вход в тестирование.

Как только появляется Git, уже можно что-то с этим делать.

Как мы с ним работаем?

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

Это – ручная работа, которая добавилась. Другого варианта мы пока не нашли.

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

Из-за того, чтобы как раз метаданных не очень много, даже полная выгрузка конфигурации – это порядка там 20-25-30 секунд, а инкрементная – она буквально меньше секунды.

И вот человек нажал и пока он тянет мышку к Git-клиенту, у него уже все выгрузилось.

В качестве Git-клиента у нас используется SourceTree. Все инструкции написаны для SourceTree.

Но есть уже отдельные граждане, которым стало тесно в гуевом клиенте, они уже идут в консоль, начинают в консоли разбираться и просто в Git Bash писать команды, что очень радостно лично для меня как линуксоида.

 

 

Следующий инструмент, который мы привнесли – это SonarQube.

Если Git – это некая платформа, на которой все построено, как основа, как базис какой-то, то SonarQube – это как вишенка на торте, самая вершина того, что мы привнесли.

SonarQube реально меняет качество кода. Если вы до сих пор не внедрили SonarQube, очень рекомендую его поставить, хотя бы где-нибудь в сторонке.

Чем он хорош?

Понятно, что про него тоже много уже рассказывали, много показывали, как он работает. Расскажу, что я увидел для себя, с чем я столкнулся.

Если прийти к людям, которые по 20 лет в профессии и сказать им: «Мужики, вы пишете код не очень», то можно получить достаточно серьезную реакцию в ответ. Особенно, если у людей ни было практики code review, если они не умеют отделять себя от своего кода. Когда кто-то ругает их код, они начинают воспринимать это лично, и могут даже драться полезть.

Что делает SonarQube? Мы ставим SonarQube, и теперь он вместо нас рассказывает людям: «Чуваки, ваш код не очень». И весь негатив, который есть у людей, разбивается о то, что бездушной железяке бесполезно говорить, чем ты недоволен.

Конечно, особо прошаренные граждане сразу прибежали и сказали: «Это не железяка, это ты его настроил! Это из-за тебя меня теперь заставляют пробелы после запятых писать, отключай давай!»

Как мы это обошли? Мы кинули клич в нашем корпоративном чате, собралась инициативная группа около 15 человек, и вместе коллегиально мы решили, какие правила нужно оставить, какие нам не актуальны, какие нужно выключить.

И теперь, если человек в своем праведном возмущении хочет не ставить пробелы после запятых, ему придется с каждым из 15 человек все это пройти, рассказать, почему это не надо. Я не видел, чтобы кто-то смог это до конца пройти этот путь.

И когда люди проходят все стадии: отрицание, гнев, торг, депрессия – в конце концов они начинают писать код по стандартам, и это реально меняет качество кода.

Код становится чистый, читабельный, красивый, одинаковый – разные люди начинают одинаково писать.

Это по-настоящему меняет ту кодовую базу, которая есть.

 

 

Следующий инструмент – Vanessa ADD.

Понятно, что нужна какая-то обработка, которой тестировать. Для автоматизированного тестирования у нас в БКС есть своя обработка, которая называется «Автоматизация тестирования».

Но основная ее проблема в том, что она за пределами БКС превращается в тыкву.

Из-за безопасности мы не можем свой код вынести куда-то наружу, и, даже если ты – суперспециалист по этой обработине, ты уволился, пошел в другую компанию, и все, эти знания никуда не нужны.

Стандарт де-факто в отрасли – это Ванесса. Мы сначала пытались завязаться на Vanessa Automation, но нам приходится ее пересобирать.

Я уже рассказывал, что у нас есть проблема, у нас не работает Ванесса. Как мы это обошли?

Я забираю исходники Ванессы из интернета, я запускаю свой скриптик на bash, который использует sed и awk. Так как я с линуксом 20 лет, то мне это было легко написать. Он проходит по исходникам и меняет имена функций, так как мне надо, чтобы они не пересекались с глобальным контекстом. Потом я запускаю сборку и кладу получившуюся Ванессу в репозитарий, все начинают ей пользоваться.

Так вот, сборка Vanessa Automation с некоторых пор стала возможна только в 8.3.17, у нас платформа 8.3.10. А ставить новые версии – это опять инфобез, это опять все эти квесты.

Поэтому мы перешли на Vanessa ADD – отличная вещь, работает. Позволяет подключать свои плагины – просто восхитительная вещь. Короче, мы остановились на Vanessa ADD, работаем с ней.

 

Выбор скриптового языка

 

Но все эти три инструмента как будто разбросанные: один одно делает, другой – другое. Нужно что-то, что их скуёт в одну цепь, как-то объединит в единое целое, в тот самый CI.

Нужен скриптовый язык.

Изначально свою первую автоматизацию я писал на bash-скрипте, с sed и awk, но как только я на внутреннем митапе попытался показать это людям "вот смотрите, вот так можно теперь автоматизировать ваш труд", реакция была очень однозначной. Они сказали: «Это вообще что? Неужели это язык? Что это такое?» То есть продать это людям невозможно. 1С-нику изучить bash – невозможно. Есть фанатики, но основная масса – они не хотят этим заниматься.

У нас работал человек, который написал обвязку над 1С на Ruby – фактически аналог v8runner. Тоже там все круто сделал, но опять же, это не продать. Что-то изменить или поменять невозможно. Ruby вообще никто не знает. Даже Python больше знают, хотя даже питону научить сотню программистов 1с – это что-то нереальное.

И вот встал вопрос у нас – чем это все обмазать.

 

 

И вот здесь как солнце сквозь тучи, и как ответ на все наши вопросы воссиял OneScript.

OneScript позволяет обойти любую специфику, любые проблемы, которые придумывает наш инфобез или администраторы.

Все это можно обойти с помощью OneScript. Он отвечает на все вопросы, всё, как мы любим.

Чем в основной массе отличается 1С-ник от программиста на другом языке? Ты придешь к программисту на другом языке, говоришь: «Чувак, здесь такая проблема», он говорит: «Пойду я в интернет, поищу, какие там есть библиотечки на эту тему. Может, что-то готовое есть».

А как только мы 1С-нику говорим, что есть проблема, он уже глаза закатил и придумывает: «Сейчас мы тут сделаем справочник, а тут – регистр, тут вот такие индексы. Я же эксперт, я знаю, как лучше хранить».

Мы всегда все пишем с нуля – так же и этот наш CI.

У нас есть специфика, свои нюансы. И все эти нюансы с помощью OneScript можно закрыть. Написать на нем что угодно.

OneScript – это потрясающая вещь, которая позволила сделать весь наш CI таким, какой нам нужен.

 

Что было? Боль и страдания

 

 

Вообще все доклады – они такие, там при рассказе «что было» – боль и страдания.

  • Боевая база у нас порядка восьми терабайт. Даже когда она свернутая, обрезанная, сжатая, подготовленная к разворачиванию для тестов – она занимает примерно 500 гигов. То есть люди берут этот бэкап, разворачивают, генерируют там миллионы документов или еще что-то. После этого они понимают, что нужно все откатить и запустить заново. Откатить даже к снепшоту – это часто дольше, чем развернуть заново. Поэтому базs у нас постоянно разворачива.тся – и тут, и вот тут, и на этом сервере. Все разворачивают базы, и тепловая смерть вселенной наступает огромными темпами.

  • Донастройка и запуск развернутой базы – я уже говорил, что там есть свои сложности.

  • Есть тестирование, которое QA как специалисты настраивают и запускают на ночь, чтобы спокойно уйти домой, а потом утром прийти и увидеть результаты. И вот они запустили все, радостно уходят домой, а утром приходят и видят, что там суперпрограммист забыл проверить синтаксис, и оно упало через пять минут после запуска. И так 17 дней подряд. Конечно, такому программисту потом выносится общественное порицание, но от этого легче не становится.

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

  • Ручной перенос изменений в хранилище – т.е. человек разрабатывает задачу в каком-то тестовом хранилище, затем это нужно перенести в боевое, и вот он руками это все переносит. Все он перенес или не все, затер он или не затер чужой код - все это только на совести того, кто переносит. И еще почему-то тоже очень любят в процессы встраивать такую вещь, что нужно где-то написать на какой-то служебной записке список изменений, которые по задаче вносятся. И вот ты сидишь, переписываешь тут функции, которые ты изменил. С точки зрения сегодняшнего момента – это дикость, но это много где есть.

 

Преодолевание

 

 

Как мы всю эту боль обошли?

  • Мы сделали запуск на пустых базах. С этим связана достаточно серьезная трансформация мозгов. Потому что когда у тебя есть боевая база или какая-то копия, ты туда можешь зайти и спросить у пользователя, с каким клиентом проблема. Порыться в реальных данных, что-то найти или подковырять. А когда у тебя пустая база, тебе нужно тестировать только логику. И написание фич для того, чтобы тестировать логику, не привязываясь к каким-то конкретным клиентам, данным – это достаточно серьезная трансформация у людей в головах. До сих пор она идет.

  • Автоматическая донастройка и запуск. Вся эта настройка окружения, которая нам требуется для базы, описана на OneScript.

  • Тестируем логику, чтобы на CI и на компах пользователей работало одинаково. Например, у нас на компах пользователей нельзя снять защиту от опасных действий. Если запускать Ванессу, где дополнительно подключается еще 20 плагинов, нужно для каждого нажать: «Да, я согласен». Но это не автоматизация, это что-то непонятное. Как это обошли? Создали маленький dt-шничек, где есть несколько ролей, и пользователь со снятой защитой от опасных действий. Этот dt-шник грузится в базу, потом в нее уже загружается конфигурация, от этого пользователя запускается база, фичами создаются уже другие пользователи, и начинается дальнейшее тестирование.

  • У Ванессы библиотека сниппетов из коробки. Если раньше у нас тесты лежали в xml, и найти в них что-то было нереально, то теперь тут спокойно все работает.

  • Автотестирование. Весь прогон CI проходит порядка двадцати-тридцати минут – вместе со статическим анализом и выгрузкой на аллюр.

  • И автомерж. Мы делаем merge-request, а в нем автоматически выводится весь список изменений. Ты не можешь там ошибиться – он тебе показывает все изменения, которые есть на самом деле – вот в таких функциях, в таких строках.

    • И если нет конфликтов, то автоматически нажатием одной кнопки все эти изменения заливаются.

    • Если есть конфликты – я запускаю небольшой скриптик, который формирует временную базу и загружает туда нашу сломанную конфигурацию из нашей ветки (с конфликтами). Перед этим я конфликтные файлы, заменяю нашими версиями, а рядышком складываю уже собранный cf-ничек с конфигурацией из ветки, которую мы мержим. В результате получается, что у нас открывается уже готовый конфигуратор, и все, что остается человеку – это сравнить-объединить с этим вот cf-ником.

Вот так у нас все работает. То есть только конфликты исправляются. Если что-то мержится автоматически, оно мержится автоматически.

 

Основной инсайт: нетехнический плейстоцен

 

 

Все технические вещи решается с помощью OneScript. А с нетехническими сложнее.

Сотрудники начинают рассказывать:

  • «Я – программист и не хочу писать Gherkin»

  • «Ваш Git мне там опять все испортил»

  • «Там что-то все красное, непонятно»

  • «Зачем мне нужно чужие тесты править?»

  • «Отключите Sonar» – это вот вообще популярно было.

Но, к сожалению,  рассказывать про эту борьбу нет времени - на доклад выделяют всего полчаса, а не неделю :)

Я столкнулся с тем, что ты делаешь человеку хорошо, а он говорит: «Нет, мне раньше было лучше. Мне не надо ничего, я не хочу ничего учить». Вот это сопротивление изменениям – это основная вещь, которая очень сильно демотивировала. Я не «директор по счастью», и не умею работать с такими людьми, мне было тяжело.

И когда я уже был готов все бросить, потому что людям ничего не надо, внезапно появились неофиты. Эти люди попробовали и сказали: «Ух ты, а нам действительно удобно, а нам действительно классно. Нам так проще и быстрее. Мы так не боимся рефакторить – у нас есть тесты, где логика не зависит от реализации. Мы можем спокойно полностью все переписать, потом тесты прогнать. У нас все работает, мы спокойно внедряемся и вообще не переживаем, что что-то сломаем».

После этого началась трансформация мозгов у людей, получилась так называемая «заразная автоматизация».

 

«Сахарок» и «дрожжи»

 

 

Из-за того, что у нас тесты на пустых базах, перед тестом нужно данные создать. А написать фичи, которые создают данные каждого вида – это очень простая, но очень нудная задача. И вот человек сидит, перекладывает реквизиты документа в значения таблицы Gherkin – это очень нудно, они тоже ругались: «Очень тяжело создавать эти данные, зачем это всё придумали?»

И внезапно нашелся человек, который посмотрел на это и сказал: «Зачем я буду на каждый вид метаданных писать свою отдельную фичу, я лучше напишу сахарок». И он написал сахарок – это четыре шага.

  • Первый – создает любой справочник

  • Второй – создает любой документ

  • Третий – пишет движения в любой регистр сведений

  • И четвертый – пишет движения для регистра накопления

Мы сейчас эту возможность уже подготовили, скорее всего, будем делать мерж-реквест в Ванессу как плагин – можно будет создавать любые данные (сейчас на следующем слайде покажу).

Что это дало?

  • Создание тестовых данных стало единообразным.

  • У нас теперь создание любого справочника и любого документа – это известный заранее синтаксис.

  • Поэтому у нас теперь QA могут сами писать фичи. Потому что программист написал что-то, и он свое тестирует. А QA же любят как-нибудь завертеть – мы тут сначала создадим данные, а потом удалим, а потом снова создадим, а потом еще раз удалим – как это обработается? За счет того, что синтаксис понятен, QA могут сами писать фичи.

  • А после этого нашелся другой человек, который к сахарку написал дрожжи. Он написал обработку, которая генерирует фичи. То есть буквально ты выбираешь какой-нибудь конкретный документ (или справочник) в базе, эта штука обходит метаданные, и сама формирует уже готовую фичу. Мы эту фичу запускаем, она, опять же, опирается на синтаксис «сахара» – все счастливы.

 

 

Вот так выглядит «сахар»:

  • у нас есть фича «Я создаю элементы справочника»,

  • параметром я ей передаю наименование справочника – в данном случае «СчетаДепо».

Соответственно, в конфигурации у нас есть все реквизиты этого справочника, мы просто идём по колонкам, ищем такой реквизит и заполняем его.

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

Очень простая вещь. И вот эта вещь, которая реально заставляет человека меняться.

Он сидел раньше и делал нудную тяжелую работу, ему было плохо – его заставляли тесты писать «Как же так? Что происходит?»

А рядом сидит человек, который написал вот такую интересную вещь. И все его хвалят, он на митапе выступил, все смотрят, думают, как у него все интересно.

И начинается «брожение умов», люди начинают автоматизировать свой труд.

И за счет того, что все реализовано на OneScript, это очень легко – ни один 1С-ник не может сказать: «Я не знаю, как этим пользоваться». Тут все на 1С – ты все знаешь и умеешь. Не умеешь? Бери и смотри.

Я очень радовался, когда пришли мерж-реквесты на мои скрипты автопрогона. Это значит, что уже есть люди, которые пишут свои скрипты – для обновления базы из текущей ветки, или наоборот, для сборки поставки. Это все работает.

 

Фича для тестирования логики для обычных форм

 

Из-за того, что у нас обычные формы, мы не можем использовать менеджер тестирования, клиент тестирования. Мы тестируем логику.

Грубо говоря, мы проверяем, что у такого-то клиента остаток в отчете будет 4.

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

На слайде показан пример такой фичи.

 

 

Эта фича проверяет логику.

Сначала мы задаем какие-то начальные данные – создаем людям остатки в денежных средствах:

  • по соглашению «100» вводим 100 рублей

  • по соглашению «200» вводим 50 рублей

  • по соглашению «201» вводим 50 рублей

Затем мы начисляем, что мы с них хотим снять:

  • у соглашения «100» мы хотим снять 90 рублей

  • у соглашения «200» хотим снять 45 рублей

  • у соглашения «201» – 10 рублей.

Итого, проверяем, сколько должно остаться:

Казалось бы, по соглашению «100» должно остаться 10, по соглашению «200» должно остаться 5, а по соглашению «201» должно остаться 40. Но у нас 8 апреля закрылось соглашение «201», а соглашение «200» закроется 15 апреля. Расчет комиссии мы запускаем за 9 апреля, то есть соглашение «201» уже закрылось. И тогда по соглашению «201» как было 50, так и осталось, потому что с закрытых соглашений нельзя списывать остатки, оно уже закрылось.

Таким образом мы проверяем высокоуровневые фичи.

И еще – из-за того, что нельзя пользоваться менеджером и клиентом тестирования, у нас встал вопрос, как запускать тесты под разными пользователями.

Пришлось городить на OneScript. Если в фиче первой строкой стоит комментарий, и там написано «Пользователь такой-то», то, поскольку в OneScript есть регулярки, это делается очень легко. Мы запускаем клиента от нужного указанного пользователя, и таким образом тестируем функциональность под разными пользователями.

 

Сборка релиза

 

 

Собственно, вот так выглядит наш CI.

  • Предусмотрена автогенерация пайплайна. Поскольку очень сильно хотелось сделать так, чтобы каждая фича, каждый тест запускался отдельно – пришлось написать генерацию. Скрипт на OneScript обходит весь каталог библиотеки, собирает все фичи, которые нужно запустить и по шаблонам генерирует пайплайн (yaml-файлик для GitLab CI), в котором перечислены все джобы.

  • И таким образом получается, что:

    • у нас есть сборка;

    • потом в параллель запускаются все тесты, и за счет этого достаточно быстро все проходит;

    • затем по некоторым условиям запускается выпуск релиза – делается сборка поставки и запускается статический анализ кода, как раз чтобы людям показать, что в их коде не так (что нужно пробелы после запятых ставить).

  • Люди, которые этим начали пользоваться, очень быстро распробовали и делают code review через черновики мерж-реквестов. Там сразу видно все изменения. Очень удобно, тимлиды очень радостно этим пользуются.

  • Обмен кодом до внедрения – еще даже до того, как что-то внедрилось. Ты можешь из другой ветки себе забрать какое-то изменение, даже которое еще не внедрено, тебе потом будет даже легче объединяться.

  • Сборка релиза, только если все тесты пройдены.

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

Вот так у нас все построено.

 

*************

Статья написана по итогам доклада (видео), прочитанного на конференции Infostart Event 2021 Moscow Premiere.

См. также

DevOps для 1С DevOps и автоматизация разработки Программист Стажер Платные (руб)

Данный онлайн-курс (интенсив) предусматривает изучение процессов, инструментов и методик DevOps, их применение при разработке на платформе 1С. 

2500 руб.

20.06.2023    22366    7    4    

311

SALE! 50%

1С-программирование DevOps и автоматизация разработки Групповая разработка (Git, хранилище) DevOps для 1С Программист Стажер Платформа 1С v8.3 Платные (руб)

Использования систем контроля версий — стандарт современной разработки. На курсе научимся использованию Хранилища 1С и GIT при разработке на 1С:Предприятие 8. Разберем подходы и приемы коллективной разработки, научимся самостоятельно настраивать системы и ориентироваться в них.

4900 2450 руб.

29.06.2022    11949    100    4    

132

DevOps и автоматизация разработки Тестирование QA Программист Пользователь Платформа 1С v8.3 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Автотесты 1С - готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарий – feature-файл, разработанный с помощью vanessa-automation. Запуск сценария выполняется интерактивно с помощью vanessa-automation или с помощью vanessa-runner в CI-системах. Доступно тестирование тонкого клиента. Поддерживаемые версии конфигураций 1С:Зарплата и Управление Персоналом 3 и версии КОРП: 3.1.30.57.

2160 руб.

05.08.2024    1289    15    1    

8

DevOps и автоматизация разработки Логистика, склад и ТМЦ Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Подсистема «Управление сборкой GLI» предназначена для динамического формирования сборочных линий Gitlab и отслеживания процесса доработок систем на базе1С:Предприятия Позволяет упростить выпуск новых релизов системы, подготовить описание доработок системы. Интегрируется с GitLab API по событиям Push, Merge-request, Pipeline. Уведомляет пользователей о результатах сборки/тестирования сборочных конвейеров через СВ, либо при её недоступности или отсутствию по E-Mail. Поможет при отправке исправлений ошибок в общую базу тестирования, сформирует запросы на слияние в ветку версии только по протестированному и подтверждённому функционалу. Подсистема рассчитана исключительно на клиент - серверную архитектуру тестовых ИБ. Поддерживаемая версии СППР 2.0.4.15, платформа не ниже 8.3.17.1549, 2.0.7.3 / не ниже 8.3.21.1664, начиная с релиза 1.0.4.30 требуется платформа не ниже 8.3.23 рекомендуемый релиз 8.3.23.1997

7000 руб.

26.08.2022    12565    10    10    

35

Тестирование QA DevOps и автоматизация разработки Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Налоговый учет Платные (руб)

Готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарии возможно использовать как для vanessa-automation, так и для СППР. Поддерживаемые версии конфигураций ERP2 и КА2: 2.5.17.113.

2400 руб.

04.07.2022    8377    38    1    

29

Тестирование QA DevOps и автоматизация разработки Программист Пользователь Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет Платные (руб)

Автотесты 1С - готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарий – feature-файл, разработанный с помощью vanessa-automation. Запуск сценария выполняется интерактивно с помощью vanessa-automation или с помощью vanessa-runner в CI-системах. Доступно тестирование тонкого клиента. Поддерживаемые версии конфигураций 1С:Бухгалтерия предприятие 3.0 и версии КОРП: 3.0.156.30.

1800 руб.

20.01.2022    7788    19    0    

13

DevOps и автоматизация разработки Программист Платформа 1С v8.3 Бесплатно (free)

В проектной разработке часто возникают проблемы с однообразностью ландшафта, производительностью и быстрой разверткой инфраструктуры. Об одном из способов избежать или изолировать данные проблемы с помощью контейнеризации расскажем в статье.

18.09.2024    1773    antonov_av    6    

14

DevOps и автоматизация разработки Бесплатно (free)

Когда информационная база «весит» несколько десятков/сотен гигабайт, для разработки и тестирования обычно используют полную копию рабочей базы. Но если информационная база превышает несколько терабайт, такой подход сталкивается с нехваткой места на диске, долгой реструктуризацией, замедленной скоростью работы и другими проблемами, связанными с размером базы. В статье расскажем, как правильно готовить копии больших баз для разработки и тестирования.

28.08.2024    6637    yuraid    28    

50
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 20.02.23 13:09
Сообщение было скрыто модератором.
...
2. partizand 137 21.02.23 08:10 Сейчас в теме
Подскажите, у вас одна база - одна доработка?
Используется ли обрамления вида //+++ //----?
Часто размеры баз большие и выделять под каждую задачу свою базу нет возможности. А несколько задач в базе уже мешают гиту правильно определить изменения.
Выход, только тесты на пустой базе.
Как вы из сонара выкидываете ошибки бсп?
kuntashov; +1 Ответить
3. Golovanoff 45 21.02.23 08:34 Сейчас в теме
(2)
Подскажите, у вас одна база - одна доработка?

Нет, у меня одна ветка гита - одна доработка. А база для разработки у меня одна. Пустая. При переключении на новую задачу я завожу новую ветку, обновляю базу разработки конфигурацией ветки и разрабатываю.

Используется ли обрамления вида //+++ //----?

Нет, конечно. При использовании гита в этом нет никакого смысла, а читаемость кода сильно портится от таких "комментариев".

Часто размеры баз большие и выделять под каждую задачу свою базу нет возможности. А несколько задач в базе уже мешают гиту правильно определить изменения.

Разрабатываю я на пустой базе. И тесты пишу для пустых баз. Но надо отличать базу и конфигурацию. Гиту ничего не мешает :) Есть у нас команды, у которых своя отрядная полная тестовая база и в ней да, может тестироваться одновременно несколько задач. Каждая задача в своей ветке, а в спец. ветке "тестовой базы" конфигурации задач объединяются (гит при отсутствии пересечения по объектам делает это сам, автоматически) и объединенная конфа накатывается на тестовую базу.

Выход, только тесты на пустой базе.

Да, на пустых, но не только на пустых. При разработке - тесты на пустых базах. Это быстро позволяет пройти "положительное тестирование" по задаче. После подключаются QA и могут гонять нагрузочные, "негативные", свои какие-то функциональные тесты на полных базах - их у QA несколько. При необходимости для какой-то сложной задачи QA выделяют под нее отдельную базу.

+ Финальный прогон релиза после его сборки - он тоже делается на полной базе.

Как вы из сонара выкидываете ошибки бсп?

Никак, у нас нет БСП, у нас ядреный плейстоценовый монолит.
kuntashov; +1 Ответить
4. strange2007 144 22.02.23 16:26 Сейчас в теме
Ух как круто. Описание краткое и интересное, но как представлю сколько и как в реальности это всё было, прям бррр))))

Можно спросить про линейки? Измеряли конкретику, по:
- Как изменилась скорость разработки?
- На сколько и в какую сторону в итоге изменилась мотивация сотрудников (разработчиков)?
- Случайно не считали, на сколько изменился перекос общей прибыли компании?
Golovanoff; kuntashov; +2 Ответить
6. Golovanoff 45 25.02.23 07:37 Сейчас в теме
(4)
Вопросы на отличненько :)
- Как изменилась скорость разработки?

"Скорость разработки" - понятие размытое. Обычно под этим подразумевают именно разработка, даже без тестирования. Если так понимать этот термин, тогда скорость не изменилась. Если добавить в понятие "разработка" еще и тестирование (как и должно быть, по идее, ведь тестирование - неотъемлемая часть разработки) - то тут тоже однозначно нельзя сказать. Обучение программистов написанию автотестов, особенно если они сопротивляются, занимает очень много времени. Но те, кто научились, начинают их довольно быстро писать, и в целом, по моим оценкам, скорость вырастает (в конце концов), потому что автотесты - это всегда быстрее, чем ручное тестирование. Другое дело, что ручным тестированием могут пренебрегать. Особенно часто с идеей "я вот это уже протестировал, а вот тут чуток поменял, но повлиять не должно, перетестировать не буду". Потом бывают неприятные сюрпризы "на бою", сам через такое проходил. В таком случае, на мой взгляд, в понятие "скорость разработки" нужно еще закладывать время на исправление багов, их тестирование и внедрение.
А вот третья часть разработки - внедрение готовой задачи - вот тут от гита, автомержа, автоматизации выхлоп буквально на несколько порядков. То, что раньше необходимо было делать руками - "сравнить/объединить по списку изменений, который до этого нужно было составить руками и вроде ничего не забыть, а потом перепроверить, что ничего чужого не затер, а выложил всё свое, и при этом ничего не конфликтанет с другими новыми задачи от других отрядов" - вот тут переход на гит дает огромный прирост производительности. Программист наконец-то освобождается от этой глупой работы, и может сосредоточиться на программировании и тестировании. А слияние изменений и внедрение (одной кнопкой "Принять мерж-реквест") происходят в автоматическом режиме. И одно только это стОит всех затрат на обучение и шторминг от новых технологий.

- На сколько и в какую сторону в итоге изменилась мотивация сотрудников (разработчиков)?

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

- Случайно не считали, на сколько изменился перекос общей прибыли компании?

К сожалению, такую обратную связь нам, разрабам, бизнес не дает.
strange2007; +1 Ответить
10. strange2007 144 27.02.23 14:48 Сейчас в теме
(6) Спасибо! Скинул ссылку на статью специалисту такого же профиля, но джависту))))
Golovanoff; +1 Ответить
5. AlMax 24.02.23 13:27 Сейчас в теме
Прекрасная статья и опыт, спасибо!
подскажите, как технически реализовывали параллельный запуск тестов на vanessa automation?
на разных агентах? через docker? через vagrant?
ведь если запускать на одном агенте параллельно сценарные тесты на VA - то будут конфликты
kuntashov; Golovanoff; +2 Ответить
8. Golovanoff 45 25.02.23 12:04 Сейчас в теме
(5)
Прекрасная статья и опыт, спасибо!

Спасибо на добром слове :)

подскажите, как технически реализовывали параллельный запуск тестов на vanessa automation?

У нас не VA, у нас ADD. Докер пробовали - не взлетело - на хостах (в т.ч. на рабочих машинах) 1с вело себя одним образом, в контейнерах - другим, поэтому отложили докер пока в уголок. Связано это было с локализацией, кодировками, ЧтениеФайла без указания кодировки и т.п. Вроде есть слухи, что в новых версиях платформы это поправлено (у нас 8.3.10). Возможно, вернемся к вопросу попозже.
Сейчас на раннерах просто параллельно запускается несколько клиентов 1с.

ведь если запускать на одном агенте параллельно сценарные тесты на VA - то будут конфликты

у нас не сценарные 1с тесты, которые суть UI, а чистые BDD (классические, как их и задумывал Норт) тесты, без интерактивного тестирования форм. Они не конфликтуют. У нас бэкофис и основные вещи, требующие тестирования - в серверном коде. Клиентская часть, а особенно поведение форм - очень незначительны в общей кодовой базе. Да и ошибки в них не так значимы, как ошибки в расчете комиссий клиентов, например.
7. unichkin 1579 25.02.23 08:29 Сейчас в теме
Добрый день! По поводу создания тестовых данных - посмотрите в VA на плагин "ИнициаторДанных", он для тех же целей писался, о которых упоминается в статье.
9. Golovanoff 45 25.02.23 12:05 Сейчас в теме
11. MaxS 2945 27.02.23 19:44 Сейчас в теме
Спасибо за статью и историю.
Почти всё как у меня

Тесты для УФ и сборочную линию научился строить в позапрошлом году, о чем жалею, что ранее не начал.
Теперь нужно тесты обычных форм освоить...
Golovanoff; +1 Ответить
13. Golovanoff 45 28.02.23 07:51 Сейчас в теме
(11) Коллега :)

ОФ тестировать - это боль и страдания. в VA запилили внешнюю компоненту, которая, как я понимаю, эмулирует мышь и клавиатуру, но всё равно тестирование ОФ - это боль и страдания. Перспективнее наделать УФ, честное слово.
15. MaxS 2945 28.02.23 08:23 Сейчас в теме
(13) Да, поэтому ОФ отложил на потом.
Но для моих целей саму форму тестировать не нужно, либо руками протестирую. Главное функционал. ADD как раз достаточно.

БКС
12. nporrep 50 28.02.23 02:37 Сейчас в теме
Выгрузка конфигурации в файлы из командной строки: /DumpConfigToFiles
14. Golovanoff 45 28.02.23 08:00 Сейчас в теме
(12) Мы в курсе, спасибо :)
Руками мы выгружаем конфигурацию в файлы, потому что для этого не надо закрывать конфигуратор. Поработал, сохранил изменения, выгрузил, закоммитил, дальше работать можно.
А после каждого сохранения закрывать конфигуратор, жамкать скрипт, затем снова заходить в конфигуратор - это как-то неэффективно.
Жамкать скрипт, который будет цепляться к базе sql, из нее выковыривать cf и его уже раскладывать на файлы - это путь. Но это путь ради пути, гораздо проще и быстрее сделать 2 клика мышкой в конфигураторе, на мой взгляд.
17. nporrep 50 02.03.23 17:35 Сейчас в теме
(14) На уровне идеи:
Чтобы не выходить из Конфигуратора, можно попробовать нетривиально использовать хранилище.
После помещения изменений в хранилище, из командной строки, скриптом, размещённым в %PATH% делаем:

commit1C.cmd -m "1С:Предприятие 3826"

в батничке commit1C.cmd:

/ConfigurationRepositoryUpdateCfg -force (пустая база, подключенная к тому же хранилищу)
/DumpConfigToFiles

set "msg="
if /i "%~1"=="-m" set "msg=%~2"

commit -m %msg%
Golovanoff; +1 Ответить
18. Golovanoff 45 02.03.23 18:45 Сейчас в теме
(17) То есть для того, чтобы поместить изменения в гит, вы предлагаете помещать в хранилище? Мсье знает толк :)))
19. nporrep 50 02.03.23 22:13 Сейчас в теме
(18) "Вижу цель, не вижу препятствий!" (с)))
Golovanoff; +1 Ответить
16. пользователь 02.03.23 17:34
Сообщение было скрыто модератором.
...
Оставьте свое сообщение