Привет, Хабр! В 2020 году компания решила вывести на рынок линейку продуктов Platform V. Для них нужна была документация, которая на тот момент велась в Confluence. Нам предстояло проделать сложную и дорогую работу: собрать документы на нужные версии, привести тексты к единому стилю и терминологии, оформить как комплект документации от поставщика ПО. Расскажу, какие инструменты мы в СберТехе использовали, почему перешли от документирования в Confluence нa Docs-as-a-Code и создали инструмент Platform V GetDocs, который помогает эффективно писать документацию.

Почему wiki-системы — не лучший выбор для продуктовой документации

Wiki-системы — отличное решение для баз знаний, энциклопедий, проектной и рабочей документации. Но у продуктовой документации свои особенности и задачи, для которых wiki-системы не очень подходят.

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

  • Версионирование документации вместе с продуктом. Это особенно важно, если поставщик поддерживает несколько версий продукта и, соответственно, документаций к ним.

  • Хорошая управляемость архитектурой контента: переиспользование текстов, подстановочные значения, формирование разных наборов документов из одних исходных текстов.

  • Генерация документации на API, базы данных, формирование документов из структурированных данных, полученных из внешних систем.

  • Различные выходные форматы: брендированный сайт для клиентов, печатные формы, документация в дистрибутиве.

  • Локализация.

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

  • Сложное версионирование.

  • Тяжеловесность и неповоротливость при больших объёмах.

  • Потеря контента при частых изменениях в объёмных текстах.

  • Невозможность генерирования документации на API, сложность или невозможность работы со структурированными данными.

  • Сложность настройки выходных форм. Как правило, для них делают отдельное решение.

Преимущества подхода Docs-as-a-Code

Для продуктов с регулярным релизным циклом, одновременной поддержкой нескольких версий и документацией в разных форматах и комплектности (для внутреннего использования, клиентов или заказчиков, регулирующих институтов) оптимальное решение — подход Docs-as-a-Code. Суть концепции в том, что работа с документацией ведется по тем же принципам, что и разработка кода:

  • Хранение и версионирование документации в системе контроля версий, как правило, вместе с кодом продукта.

  • Простая интеграция обновления документации с системами ведения задач.

  • Использование логической разметки тестов, облегчённых языков разметки, понятных широкому кругу технических специалистов: разработчикам, тестировщикам, аналитикам, техническим писателям, менеджерам.

  • Совместная разработка документации, рецензирование и согласование документации по правилам проверки кода.

  • Разработка правил оформления документации отдельно от контента.

  • Организация автоматического тестирования, сборки и публикации документации в рамках типовых DevOps‑процессов.

Подход Docs-as-a-Code обеспечивает надёжную и прозрачную работу с контентом и не требует отдельных трудоёмких операций по оформлению контента при его разработке.

Особенности составления документации на Platform V

В СберТехе практически сразу решили перейти с Confluence на Docs-as-a-Code. И, как и многие компании, мы встали перед выбором инструмента, который бы позволял легко работать с документацией. В наших условиях было выгодно сделать свой продукт:

  • Объёмная продуктовая линейка: более 80 программных продуктов из более 200 чем программных компонентов.

  • Большая производственная команда: более 2000 сотрудников.

  • Стандарт документации и внутренние стандарты, регламентирующие разработку продуктов.

  • Необходимость формирования документации на различные виды API.

  • Частые изменения требований к составу документации и её поставке.

Platform V GetDocs — продукт для производства документации в парадигме Docs-as-a-Code

Platform V GetDocs — простой и удобный инструмент для разработки документации Docs-as-a-Code и сайта документации. Поддерживает все необходимые сценарии, легко расширяется и отвечает потребностям команд разработки и техписателей.

Основные функциональные особенности и преимущества:

  • Простая и гибкая разметка текстов: MyST Markdown, reStructured Text. Поддержка подстановочных значений, переиспользования текстов, включения и исключения текстов по признакам сборки.

  • Поддержка работы с разными конфигурациями репозиториев:

    • Монорепозиторий документации: информации о всех продуктах в выделенном репозитории.

    • Отдельный репозиторий для документации на каждый продукт.

    • Единый репозиторий для кода продукта и документации.

  • Сборка документации:

    • Различные выходные форматы документации: статический сайт в архиве для дистрибутива, печатные формы PDF, DOCX, веб‑версия для сайта документации.

    • Сборка комплектов документации специального назначения, например, для регистрации в Едином реестре российского ПО и др.

    • Сборка справочников API из исходных кодов и спецификаций: OpenAPI, AsyncAPI, GraphQL, Java API, gRPC, JSON‑RPC.

    • Отображение структурированных данных в виде отдельных документов или в рамках одного документа (источники JSON, XML, YAML и др.).

    • Простое управление сборкой через интерфейс и возможность сборки как отдельных комплектов документации, так и сайта целиком.

    • Высокая скорость сборки: меньше 1 минуты для одного комплекта документации в режиме разработки, около 5 минут для публикации документации на сайте для читателей.

  • Проверка документации:

    • Отчёт с переходом в один клик к источнику ошибки в репозитории.

    • Настраиваемые и легко пополняемые правила из внутренних руководств и брендбуков компании.

    • Проверка справочников API.

    • Проверка целостности ссылок и конфигурации сайта.

    • Проверка структуры документов и разделов.

    • Проверка текстов на иллюстрациях, синтаксиса логической разметки, грамматики русского языка.

    • Поиск и сверка именованных сущностей.

  • Согласование и публикация:

    • Разделение по уровням готовности к публикации: документация в разработке, согласована и готова к публикации, опубликована на сайте.

    • Контроль публикации на сайте готовой документации.

    • Синхронизация контента между разными инсталляциями (внутренний сайт и внешние сайты для клиентов).

  • Отображение документации:

    • Единый стиль отображения для всего контента для разных источников исходных файлов: документы в MD/RST, справочники API, структурированные данные.

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

Техническая реализация Platform V GetDocs

Продукт реализован в виде микросервисов, запакованных в Docker-контейнеры. Их можно за считанные секунды развернуть на любой машине с любой операционной системой, где установлен Docker. В качестве движка генерирования документов используется Sphinx с подключённым парсером MyST Markdown. Проверка выполняется целым набором средств: Vale, mdlint, OCR, своими решениями.

Мы также добавили в продукт конфигурацию для разворачивания в кластере Kubernetes. Использование Platform V GetDocs в Kubernetes с его богатой экосистемой даёт весомые преимущества при администрировании, поддержке и расширении продукта. Например, мы не стали изобретать интерфейс сборки документации, а просто развернули Argo Workflows и настроили там нужные конвейеры в формате YAML.

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

Чтобы все комплекты документации были в едином стиле и проверялись по единым правилам, мы вынесли в отдельные репозитории шаблоны сайта и печатных форм, правила проверки и конфигурирование основных сайтов.

Platform V GetDocs включает в себя два контура: сборка документации и сайт документации. В упрощённом виде архитектура продукта представлена на схеме.

Основные преимущества технической реализации:

  • Docker‑образы обеспечивают единую и защищённую среду функционирования компонентов в любом окружении.

  • Микросервисная архитектура позволяет расширять и выборочно обновлять продукт без полной пересборки и разворачивания всего решения.

  • Функционирование в кластере Kubernetes даёт высокую скорость, доступность, автоматическую отказоустойчивость и масштабируемость решения, что особенно важно при огромных объёмах постоянно обновляющейся документации. Дополнительно мы можем автоматически обновлять и разворачивать новые компоненты в считанные секунды, и в случае ошибок в разработке быстро откатываться на стабильные версии. И всё это без каких‑либо простоев!

  • Связка Sphinx и MyST Parser даёт средства для гибкого ведения документации: богатую семантическую разметку, легкое расширение разметки, смешанное использование MD/RST, сложные таблицы, включение/исключение контента по признакам, подстановочные значения, единый источник, локализацию, конфигурируемые шаблоны для разных форматов генерируемой документации. Дополнительно заменили conf.py на более простой YAML.

  • Гибкая настройка шаблона сайта документации.

В следующих статьях расскажем о реализации нашего продукта, поделимся рецептами организации документирования для технически сложных программных продуктов и покажем, как Platform V GetDocs упрощает рабочий процесс.

Светлана Каюшина

Руководитель документирования Platform V

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


  1. EvilBeaver
    16.04.2024 10:47
    +2

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


    1. Redduck119
      16.04.2024 10:47
      +2

      Возьмите карту до 120 дней без процентов(возьмём с вас по дружбе, не много).
      Еще положите денег. Получите доход (без процентов).
      И тогда Вам покажем скриншоты.


      1. EvilBeaver
        16.04.2024 10:47

        Чет дороговато за скриншоты, я и так вам торчу несколько мультов ипотеки :)


        1. Redduck119
          16.04.2024 10:47

          Ипотека не считается.
          Возьмите кредит на индивидуальных условиях.


    1. kaushina
      16.04.2024 10:47

      Добрый день! Мы поделились опытом, который можно применить для решения практических задач. Надеемся, что информация полезна всем, кто разрабатывает подобные системы или находится на этапе выбора инструмента документирования. Также рассказали о новом продукте в линейке Platform V. Если продукт вас заинтересовал, мы можем провести демо. Оставьте, пожалуйста, заявку на нашем сайте https://platformv.sbertech.ru/products/prikladnye-produkty/get-docs.


  1. Nprasolov
    16.04.2024 10:47
    +3

    здорово что спички на кдпв уложены поперек а не вдоль, значит их еще и обрезать пришлось


    1. Squoworode
      16.04.2024 10:47

      Обратите внимание на размер головок. Мне кажется, это кастомный коробок двойного размера.


      1. Aleus1249355
        16.04.2024 10:47

        Действительно забавно. Обычный коробок был сделан специально привычной нам формы, чтобы спички лежали аккуратно все в одну сторону. А в этом они будут лежать как на картинке слева если потрясти. Так сказать self made problem


  1. SUNsung
    16.04.2024 10:47
    +1

    Для больших компаний такое правильно и часто встречается. (Хотя в статье переусложнено как по мне)

    Хотя чаще есть отдельный человек что занимается ведением всех технических данных (и техническ й стек глубоко вторичен).

    Таблицы и прочее прочее, нужны больше для пояснения функционала и прочих данных верхнего уровня. Когда документация "низкого уровня" всегда попоболь, так разрабатывается и правится.

    .

    У нас на работе есть частая задача с созданием и модифицированием АПИ в огромных обьемах.

    Прошли через многое.

    На сейчас реализована обратная система - из openAPI файла генерируются методы роута, со всеми проверками что описаны в openAPI. Если валидация верна то результат передается на метот указаный в openAPI (х_ параметр) или на типовую заглушку если метот не указан.

    Такой подход очень сильно упростил жизнь:

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

    2. Единый вид валидации и обработки всех перехватов.

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

    4. Добавление новых методов или модификация старых требует только работу с документацией. Нет "лишней работы" которую так не любят разрабы. Все что делается влияет на работу и отображается в документации, без дублей.

    5. Гибкая работа с версиями АПИ или разными точками входа, в одном приложении. Разные методы могут отдавать один и тот же результат и работают с одним и тем же методом.

    6. Документацию можно открыть в любом удобном виде, так как это открытый стандарт.

    Конешно не обошлось и без минусов:

    1. В openAPI нет веб-сокетов. Пришлось "придумать" свои костыли описания и уже который год с ужасом "предвкушаем" когда в стандарте он появится.

    2. Пришлось отказатся от не строгой типизации, когда параметр может принимать несколько разных видов данных, потому как это переусложняло и запутывало. Старые версии поддерживают, но новые уже нет.

    3. Создалось более двух десятков новых параметров которых нет в openAPI но которые необходимы нашему парсеру для работы. Для работников пришлось писать документацию на документацию)

    4. Для тех кто привык работать с системами автодокументирования было сложно переключится на новый формат. Доходило до споров и даже одного увольнения.

    5. Такой формат работы с "черными ящиками" заставляет програмистов быть более сфокусироваными. Тесты генерируются вместе с роутами и проверками, потому нельзя "набросать" готовое решение и сказать "ясделял".


  1. MadyDady
    16.04.2024 10:47
    +1

    Занимаюсь сейчас примерно тем же самым, но пока в начале пути :) Поэтому пару вопросов

    Sphinx из коробки не умеет генерить docx, что вы для этого используете? Делали свои шаблоны для публикации docx документов?

    Не совсем понял, зачем комбинируете rst и md? Rst побогаче будет. Md обычно берут, если нужно попроще.

    Как работаете со сложными таблицами? У нас аналитики любят в конфлюенсе использовать вложенные таблицы - как вы их "парсили"? Я пробовал просто экспортировать в ворд, а потом пандоком в рст, в целом получается неплохо, но приходится дорабатывать напильником.


  1. pqbd
    16.04.2024 10:47
    +1

    Ответ на главный вопрос почему из заглавия: потому что "выгодно". Почему это "выгодно" осталось загадкой :-)


  1. AlexJameson
    16.04.2024 10:47

    Здравствуйте, спасибо за то что поделились опытом. Скажите пожалуйста, будет ли этот инструмент доступен для внешних пользователей? Также интересно, как именно вы используете Vale для русского языка. Вы просто ищете русскоязычные слова как последовательность символов, или же у вас есть свои наборы более высокоуровневых правил?


  1. RD-1-2020
    16.04.2024 10:47

    А этот некий движок получается создаёт просто сайтик с конкретной версией доки, а если хочется как у postgres? В самой доке содержится куча версией между которыми можно переключиться.


  1. mykytashch
    16.04.2024 10:47

    Спасибо, а скачать и протестировать-то где?