惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Full Disclosure
Recorded Future
Recorded Future
T
Tenable Blog
S
Securelist
C
CERT Recently Published Vulnerability Notes
T
Threatpost
S
Schneier on Security
A
Arctic Wolf
The Hacker News
The Hacker News
C
CXSECURITY Database RSS Feed - CXSecurity.com
Know Your Adversary
Know Your Adversary
P
Privacy International News Feed
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Register - Security
The Register - Security
Cisco Talos Blog
Cisco Talos Blog
AWS News Blog
AWS News Blog
K
Kaspersky official blog
T
True Tiger Recordings
T
Threat Research - Cisco Blogs
V
Vulnerabilities – Threatpost
P
Palo Alto Networks Blog
T
The Exploit Database - CXSecurity.com
小众软件
小众软件
B
Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
Cyberwarzone
Cyberwarzone
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tor Project blog
Spread Privacy
Spread Privacy
Malwarebytes
Malwarebytes
P
Proofpoint News Feed
F
Fox-IT International blog
F
Fortinet All Blogs
P
Privacy & Cybersecurity Law Blog
G
GRAHAM CLULEY
量子位
Latest news
Latest news
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
Project Zero
Project Zero
T
Tailwind CSS Blog
N
Netflix TechBlog - Medium
Martin Fowler
Martin Fowler
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
I
Intezer
博客园_首页
腾讯CDC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Darknet – Hacking Tools, Hacker News & Cyber Security

Все публикации подряд на Хабре

Как за один вечер я написал сервис инвентаризации оргтехники для филиальной сети из 16 локаций Склад нанимает — и не может остановиться. Дефицит складских работников в 2026 году: причины и решения Шёл за утечкой памяти, нашёл утечку диска: SXSSFWorkbook без dispose() в Apache POI Штраф в размере 155 000 рублей получил владелец сайта по заявлению Роскомнадзора Индивидуальный план развития: от формальной процедуры к инструменту управления экспертизой команды Как понять, что вы не управляете финансами, а просто смотрите на цифры Водоросли и микропластик Масштабирование LLM: от одного чипа до ЦОДа. Глава 3. Траснформеры Бомба замедленного действия взорвалась: эпоха ИИ «бери сколько унесёшь» закончилась Стимпанк как часть жизни. История паровых двигателей и место, которое они занимали в мире в XIX-XX веках. Часть 2 288-ядерный Xeon 6+ и другие серверные CPU От OCR к смыслу: как мы научили модель понимать, кто кому отец, мать, жених и свидетель Насколько плох был Intel iAPX 432 — проверяем на практике Когда Reality не хватает: добавляем Hysteria2 + Salamander в iOS-мессенджер, и как всегда грабли по дороге (ч.2) Разработчики не экстрасенсы: как мы перестали приносить туман вместо ТЗ Дайджест C++: новости, полезные материалы и “свой язык” на десерт Ещё один репозиторий моделей для Archi 10 простых шагов, чтобы создать позиционирование для продукта Загадочная поэма древнего Китая, работающая как компьютер CLOUD Act, GDPR и ваш DNS: что на самом деле может ваш провайдер Ускоряем и оптимизируем numpy, pandas, scipy и sklearn Idempotency keys: 5 граблей, которые мы поймали на проде Gamedev. Парсинг данных из Google Sheets и Excel в json без привлечения программистов Nano Banana Google AI: как использовать Нано Банана для генерации и редактирования изображений Два игрока на весь российский рынок ИИ: что показал ЦИПР-2026 Менеджер ресурсов ЯНДЕКС 360 (YANDEX 360) промокоды июнь 2026: промокод Yandex 360 скидка 40% на годовые тарифы Open-Source инструмент для автоматического перевода книг Ищу ранних тестировщиков для Android-версии agent harnesses Не используйте LLM для текста Увеличиваем продажи без слез аналитика Оптимизация запросов к PostgreSQL: 5 неочевидных настроек для продакшена 45 лет тюрьмы за DROP TABLE и переход Карпатого в Anthropic Планирование движения для ровера на ходовой Ackerman'а Революция в изучении языков Java — быстрая. Ваш код может таким не быть Как я опоздал на конкурс OpenAi с новой архитектурой нейросети Быстрые интеграции в 1С: прощайте, бесконечные переделки Как получить субсидию 300 миллионов от Минпромторга? preIPO Anthropic, OpenAI, SpaceX. Разбираемся — стоит ли участвовать? Entaxy ION + OPC UA: два способа получить данные с промышленного оборудования Память на миллион, а толку ноль: как мы спасали ИИ-агента от «тупости» РСЯ, AdSense или myTarget: что на самом деле в 2026 приносит больше денег сайту и причем тут монетизаторы Практическое построение сервисов на Go под реальный трафик PostgreSQL и аналитика: что меняется, когда хранилище становится общим Codex за 5 месяцев 2026: мой топ-5 релизов, что не зашло и где OpenAI обогнал Anthropic Как создать короткое видео с помощью нейросетей: Полный гайд по Veo 3.1, Kling 3.0 и Happy Horse 1.0 Алгоритм проверок физлиц от экс сотрудника ФНС Как ИИ портит резюме студентам Системные вызовы в сфере ИТ в 2026: стратегический взгляд для ИТ-руководителей Вайбкодинг заканчивается на localhost: как я строю SaaS для цифровизации коттеджных поселков с Codex Производственные риски в небольшом кастомном производстве. С чем я сталкивалась и как научилась это учитывать Подключаем ИИ органы чувств: bash-демон, пайка и самосознание на Raspberry Pi Я хотел повторить Growing Neural CA за вечер. Ушёл месяц Промт для генерации текста без ИИ следа — как писать уникальные тексты через нейросеть От capabilities к AppArmor: что реально остановит атакующего в контейнере CactOS Вектора интересов: как находить настоящую мотивацию и усиливать команды Цена безопасности [Перевод] Цена безопасности “Рубик” от пет-проекта до прода или ITIL 4 для строительно-торговых центров Чего ждать (и не ждать) от ремейка AC4 Black Flag Архитектурный тупик корпоративного хранения: почему смена модели не снимает ограничений и что с этим делать Атаки через подрядчиков, дефицит кадров и квест с импортозамещением: главные вызовы ИБ в 2026 году Я не оставлю детям наследства Почему порты стали «дверями» в сервер, и кто решил, что SSH будет 22 Почему зарубежные разработчики чипов возвращаются на китайские фабрики Как у меня НЕ получился торговый бот на Polymarket Проектирование архитектуры в нотации ArchiMate с использованием ИИ. Часть 2 Как превратить домашнюю файлопомойку в умную AI-галерею на основе сборки из x99+Xeon и видеокарты за 2 тыс рублей Перспективы заселения нашей галактики Кризис менеджмент в ИТ Reactive Programming не спасёт вас. Если вы не решили эти 5 проблем — у вас просто медленный монолит с Flux Как я делаю DIY-контроллер для ПК: громкость, приложения, MIDI, OBS Миграция микросервисов на Python с помощью LLM: экономим месяцы для разработчиков Программирование микросхем GAL и им подобных Почему таск-трекер не заменяет ИСУП: из чего состоит полноценный контур управления проектами Всё об информационной безопасности. Кибербезопасность. DevOps, CI/CD. Хакеры. Алексей Федулаев Как импортировать базу клиентов в amoCRM и навести порядок в контактах Как мы четыре раза переписали Outbox Google предлагает единый «водяной знак» для изображений, видео и текста, созданных ИИ Сексизм в IT: данные вместо домыслов Один фронтенд, чтоб править всеми, один фронтенд, чтоб всех найти: 1 точка входа, разные BI ИИ в тестировании: зачем мы пошли в пилот и почему начали с чата, а не с агентов Как я научила Telegram-бота наводить порядок в чате с мемами: пересылка по хештегам в соответствующую тему Как мы сделали внутреннюю CRM для управления студией – опыт Doubletapp Десятипальцевый метод — как печатать цифру " Шесть "? Партнерская программа по нейросетям: зарабатывай на ИИ, приводя клиентов в AI-сервис Как я сделал «клик по элементу → открыть в VS Code» за один вечер Эволюция Telegram‑бота на C++: от «лапши» в main() до ООП, in‑memory кэша и мутов по Фибоначчи Как я (внезапно) стал адвокатом вайб‑кодинга в корпорации Дизайн за 5 минут. Дайджест мая 2026 Только 17% всех 64-битных целых чисел можно разложить на два 32-битных 0,000000001% × ∞ = 100%. Вы осознаёте что любое событие неизбежно? «Вы либо трусы наденьте, либо крестик снимите». Как мы выиграли еще один суд против PR-агентства PRslon Почему вы тратите время не на переговоры, а на чужую внутреннюю драму. Как проходят переговоры с крупными компаниями Как приоритизировать регрессионные проверки, когда сжаты сроки релиза Электронные транспортные накладные: технический разбор нововведений 2026 года для логистов, разработчиков и бизнеса Как определить LLM под капотом чат-бота: учебный эксперимент по black-box fingerprinting Хабру 20 лет — зовём вас отметить это к нам Домой
Приручаем железо: внедряем DevOps в промышленной разработке
Andrey_Biryu · 2026-05-27 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение11 мин

Охват и читатели2.8K

Обзор

Привет, Хабр! Меня зовут Андрей Бирюков. Я независимый эксперто в области ИТ и ИБ, преподаю в учебных центрах и пишу книги.

На просторах сети можно найти множество статей, посвященных внедрению DevOps. В них рассказывается о контейнерах, веб серверах, базах данных и прочих корпоративных сервисах, и их реализации.

Цена ошибки в таких сервисах это простой или недоступность системы. Но в промышленной разработке всё иначе. Если ошибка в коде отправит стрелу экскаватора в нештатное положение или остановит конвейер на автозаводе — простой стоит десятки тысяч долларов в час. А перепрошивка парка из двух тысяч контроллеров вручную может занять месяц.

Но разработчики промышленного оборудования тоже хотят DevOps «как в Google», только при этом у них RS-485 и «голое железо без ОС». В этой статье мы на реальных примерах посмотрим, как можно внедрить DevOps для разработки промышленного оборудования.

Три проклятия промышленной разработки

Прежде чем строить конвейер, признайте некоторые ограничения, с которыми веб‑девопс не сталкивается. Начнем с того, что железо не виртуальное резиновое. Ваш контроллер, возможно, работает на процессоре с частотой 200 МГц и 64 мегабайтами оперативной памяти. Никакого Docker‑демона, раннера GitLab или Python‑скрипта вы туда не поставите. Там есть только последовательный порт и протокол Modbus.

И что же нам с этим делать? Принять как факт: агенты непрерывной доставки не живут на целевом железе, они живут рядом. Вы строите шлюз обновлений — отдельное устройство или сервис, который через промышленный протокол (например, OPC UA или MQTT) передает образ прошивки кусками и подтверждает целостность.

Рассмотрим пример из практики. У одного заказчика были контроллеры на FreeRTOS без сетевого стека. Они сделали шлюз на Raspberry Pi (да, попахивает бытовым DIY, но дешево и сердито), который физически подключался к отладочному разъему JTAG через самодельный переходник. Шлюз получал бинарник из Artifactory по HTTPS и прошивал контроллер. Оператор просто нажимал кнопку на веб‑интерфейсе шлюза вместо того, чтобы ехать на склад с ноутбуком.

Следующее проклятие — сертификация не прощает перемен. Если ваше устройство выходит в медицинскую или авиационную серию, каждая прошивка должна быть сертифицирована. Процесс занимает месяцы, и в это время вы не можете деплоить каждое изменение. Ваш релизный цикл — это не пять минут, а три месяца.

Для решения этой проблемы можно разделить пайплайн на два контура. Контур разработки — быстрый, частый, без сертификации. Он работает только на стендах разработчиков и HIL‑стендах. Контур релиза — редкий, строгий, со всеми проверками и подписями. И главное: автоматизируйте не деплой, а подготовку к сертификации.

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

Так, например, в проекте медицинского томографа сертификация занимала четыре месяца. Сократить этот срок нельзя, но можно сократить время подготовки к сертификации с трех недель до двух часов. Пайплайн собирал всю доказательную базу: протоколы статического анализа (MISRA), отчеты о покрытии тестами на HIL‑стенде, SBOM в формате SPDX. Когда приезжал сертификационный орган, инженер просто открывал папку с артефактами конкретного релиза.

И, наконец, офлайн — это норма. Промышленные сети часто физически изолированы и в них нет интернета. Нет доступа к вашему приватному Docker Registry. Нет возможности дернуть зависимость с GitHub.

В таких случаях проектируйте ваш DevOps‑конвейер как отказоустойчивый офлайн‑терминал, возможно даже в форм факторе, аналогичном представленному на рисунке выше. Все артефакты должны лежать внутри периметра.

Все зависимости — кэшироваться локально. Причем кэш должен быть не «прозрачным прокси», а полной копией с проверкой контрольных сумм. И ещё один совет: всегда храните компилятор и все тулчейны внутри системы контроля версий или артефакториума. Через три года вы не найдете ту версию GCC для MSP430, а прод показать надо.

Вот еще небольшой пример. У заказчика из нефтегаза площадка находилась в тундре, связь — спутник с лагом 700 миллисекунд и лимитом трафика 500 мегабайт в месяц. Пайплайн в такой инфраструктуре был сделан двухэтапным.

В центральном офисе собирался «кит» — образ виртуальной машины со всеми средами, зависимостями, тулчейнами и последними стабильными прошивками. Этот образ записывался на NVMe‑накопитель и уезжал с вахтовиком на вертолете. На площадке разворачивали локальный GitLab Runner и всю инфраструктуру внутри одного сервера.

Архитектура промышленного пайплайна

Теперь перейдем к конкретной структуре. Здесь нам придется забыть про классическую тройку Dev — Test — Prod, так как для промышленности она работает иначе. Здесь у нас будет несколько слоев, каждый из которых будет использоваться для определенных задач.

Слой ноль: Sandbox — рабочая станция разработчика.

На этом слое всё разрешено. Эмуляция QEMU, падения в kernel panic, отладчики, профайлеры. Разработчик собирает код у себя, накидывает юнит‑тесты, проверяет статику. Этот этап должен занимать не больше десяти минут, иначе разработчик начнет коммитить неотлаженный код «на сервер, пусть там проверят».

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

Слой первый: Hardware-in-the-Loop — реальное железо в тепличных условиях.

На этом слое у нас уже стоит реальный контроллер (или несколько) на столе в лаборатории. На него подаются тестовые сигналы от генератора. Он управляет не реальной установкой, а её эмулятором — второй платой или симулятором нагрузки.

Небольшой пример из жизни разработчиков лифтового оборудования. Стенд состоял из двух промышленных ПЛК. Один был тестируемым (наш софт), второй — эмулятором шахты (подвигал моторчики, замыкал датчики дверей). Между ними — электрическая развязка на реле. В пайплайне после каждого пул‑реквеста запускался сценарий: «открой дверь, загрузи кабину на 300 кг, поезжай на третий этаж». Если лифт ошибался этажом — тест падал.

Здесь стоит отметить, железа всегда меньше, чем разработчиков. Поэтому HIL‑стенды — ресурс ограниченный. И для работы с ними нужно внедрить очередь на запуск. Pull request не запускает тесты мгновенно, а встает в очередь. А вот merge в основную ветку — уже обязательно запускает полный набор на всех доступных стендах, даже если это займет ночь.

Слой второй: FAT (Factory Acceptance Testing) — приёмочные испытания.

Этот этап проходит уже не разработчик, а технолог или сервисный инженер. Собрана полная система: несколько контроллеров, панель оператора, реальные датчики и исполнительные механизмы (но без нагрузки на производстве). Здесь код не обновляется автоматически. Только по команде человека.

На этом слое DevOps необходимо автоматизировать подготовку окружения для FAT. Ваш пайплайн по тегу релиза (например, v2.3.0-fat) должен:

  • собрать прошивки для всех типов контроллеров (главный пульт, удалённая станция, датчики давления);

  • запаковать их в единый архив c манифестом;

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

  • записать лог сборки и контрольные суммы каждого бинарника.

Технолог берёт этот архив, загружает на ноутбук, идёт к стенду и прошивает всё по инструкции. Он делает это руками. Потому что, если что‑то пойдёт не так во время FAT, он обязан видеть процесс.

Слой третий: Production — железо на реальном объекте.

Здесь действует принцип «pull, а не push». Система не деплоит обновления принудительно. Вместо этого каждое устройство (шлюз, контроллер) периодически опрашивает специальный сервер: «Есть новая подписанная версия для моей модели и ревизии?». Если есть — устройство само скачивает, проверяет подпись, сверяет совместимость и применяет обновление (не всегда по сети — иногда через тот самый шлюз по RS-485).

Как это выглядит в коде. У вас есть Git‑репозиторий релизов. Каждый релиз — это тег вида release/2025.03.18/tomograph-2.4.1. В папке manifests лежит YAML‑файл:

device_model: "Tomograph-X7"
hw_revision: "Rev.C"
firmware_version: "2.4.1"
sha256: "a7f3c9e1..."
signature: "RSA:... (подписано закрытым ключем)|
url: "https://updates.internal.company/firmwares/tomograph_x7_v2.4.1.bin"
min_compatible_hw: "Rev.B" # можно обновлять с Rev.B, но не с Rev.A

Устройство скачивает этот манифест, проверяет подпись публичным ключом, зашитым в неизменяемую память, и если всё ок — тянет бинарник.

Главный принцип: вы не управляете обновлением принудительно. Вы объявляете наличие новой версии. Когда её установить — решает владелец производства. Иногда — никогда, и это тоже нормально.

Автоматизация безопасности

Веб‑разработчик думает о безопасности как о защите от взлома. Промышленный разработчик думает ещё и о безопасности как о защите от дурака. Здесь нужно усвоить простое правило: без цифровой подписи нет деплоя.

Каждый бинарник, который попадает на реальное железо (и даже на HIL‑стенд), должен быть подписан. Ключ подписи — на отдельном HSM‑модуле, доступ к которому есть только у ответственного за релизы. Причём подписывается не один файл, а вся сборка целиком. Если кто‑то заменит прошивку контроллера, но не подпишет заново манифест — устройство отвергнет обновление.

Для реализации в пайплайне добавьте шаг sign artifacts после всех тестов, но перед архивацией. Он работает только для тега release/* и не работает для веток разработки. Подпись ложится в отдельный файл .sig рядом с бинарником. При этом, на устройстве проверка занимает микросекунды.

По мимо цифровой подписи, для каждого релиза должен быть разработан SBOM (Software Bill of Materials). Это список всех компонентов: библиотек, фреймворков, даже фрагментов кода из сторонних репозиториев. Для промышленности это критично: если завтра найдут уязвимость в вашей версии FreeRTOS, вы должны мгновенно сказать, на каких устройствах она установлена.

Для генерации SBOM в конце пайплайна запускается инструмент (например, FOSSA или простой скрипт, анализирующий зависимости linker'a). Он создаёт файл в формате CycloneDX XML. Этот файл ложится в артефакты релиза и подписывается тем же ключом. Через полгода при аудите вы просто показываете папку со всеми релизами и SBOM к ним.

Пример из практики. В нефтегазовом проекте регулятор потребовал отчёт по библиотеке с критической уязвимостью. У заказчика было 3000 контроллеров на трёх площадках. Скрипт, который за три минуты перебрал все манифесты, нашёл 42 устройства с уязвимой версией и сгенерировал задачу для сервисной бригады. Без SBOM пришлось бы объезжать каждый шкаф вручную.

Что делать с Legacy‑проектами

Да, легаси в промышленности хоть отбавляй, но избавиться от устаревших решений здесь еще сложнее, чем в корпоративе. Допустим, у вас есть система, которой десять лет. Сборка — через Makefile, который ничего не кэширует, бинарники распространяются флешками, документация в Word‑файлах на общем диске. DevOps там не внедрить, скажете вы. На самом деле внедрить можно, но не целиком.

Для начала уберите людей из цикла сборки. Сейчас ваш инженер собирает прошивку локально, потом копирует её на флешку. Сделайте скрипт сборки (оберните ваши инструкции в bash‑скрипт), который запускается на выделенном сервере по команде из чата. Артефакт складывается в общую папку с датой и коммитом. С точки зрения автоматизации это уже прогресс.

Затем добавьте автоматическую проверку после сборки. Простейший тест: «бинарник не превышает 512 килобайт? Есть ли в нём секция.text?». Если провалилось — сборка считается неудачной, на флешку не копируется.

На следующем шаге введите контроль версий для прошивок. Заведите простой SQLite или даже текстовый файл, где записываете: дата сборки, версия прошивки, от какого коммита, на каких устройствах установлена. Это уже база данных конфигураций.

В результате через три месяца у вас будет не DevOps, но «хорошо организованная рутина», а это 80% пути.

Организационные ловушки и как их обойти

Техническая часть — половина дела. Вторая половина — убедить людей работать по‑новому. И на этом пути нас подстерегают некоторые ловушки.

  • Ловушка первая: «у нас тут особенные требования, автоматизация не подходит». Обычно это говорит главный технолог или safety‑инженер. Они правы в том смысле, что автоматизация не должна ломать процессы валидации. Но они не правы, что автоматизация невозможна.

Для решения этой проблемы пригласите их участвовать в проектировании пайплайна. Пусть они пропишут правила: «прежде чем собрать релизную прошивку, должна выполниться проверка А, Б и В». Вы реализуете эти правила в коде пайплайна. В итоге их требования не игнорируются, а становятся жёсткими, воспроизводимыми шагами. И инженеры перестают бояться.

  • Следующая ловушка, а точнее, классическое заблуждение: «мы всё равно не можем деплоить часто, зачем нам CI/CD?»

DevOps в промышленности измеряется не частотой релизов, а временем восстановления после сбоя и стоимостью сертификации. Покажите цифры: сколько человеко‑часов в месяц тратится на сборку прошивок руками. Сколько раз инженер забыл включить оптимизацию в компиляторе и прошил debug‑сборку, которая тормозит. Во сколько обходится простой, потому что «нужный HEX‑файл уехал на том ноутбуке у Петрова в командировку».

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

Для решения берите не проект целиком, а одну больную точку. Самую больную. Ту, где инженеры проклинают текущий процесс каждый день. Автоматизируйте только ее. Не стройте идеальный пайплайн — сделайте уродливый скрипт, который решает 80% проблемы, но запускается одним кликом. Когда все увидят, что стало легче, дальше пойдет само.

Что в сухом остатке

Весь этот гайд можно свести к одному тезису: в промышленном DevOps скорость — не метрика. Метрика — это предсказуемость. Вы должны точно знать, какой код лежит на каждом устройстве, как он был собран, кто его подписал, какие тесты он прошёл, и как откатить на версию годичной давности, если новые датчики не пришли на склад.

Начинайте с малого. Возьмите один тип контроллера, один стенд, одну прошивку. Автоматизируйте её сборку. Добавьте цифровую подпись. Напишите скрипт, который проверяет подпись перед прошивкой. Это уже победа.

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

Если хотите продолжить тему DevOps, автоматизации и надежной инфраструктуры, присмотритесь к открытым урокам OTUS. Их бесплатно проводят в рамках онлайн-курсов преподаватели — можно познакомиться с экспертами и задать вопросы.

  • 3 июня, 20:00 — «Internal Developer Platform: self-service-инфраструктура за один вечер». Записаться
    Разберем, как упростить работу разработчиков через внутреннюю платформу и self-service-инфраструктуру.

  • 4 июня, 20:00 — «Продвинутый Bash». Записаться
    Поговорим о скриптах и приемах автоматизации, которые помогают убрать ручную рутину из инженерных процессов.

Больше мероприятий — в календаре уроков OTUS. А еще подписывайтесь на канал OTUS в MAX, чтобы не пропускать новые материалы и анонсы.