Top.Mail.Ru
 

ИИ-агент вместо команды разработки: DevOps-инженер собрал пять инфраструктурных сервисов

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

Наш клиент — компания в сфере кибербезопасности: разрабатывает технологии и сервисы для противодействия киберпреступности и защиты бизнеса от киберрисков.

Задача:

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

Итоги:

Было: образы переносили скриптами или вручную; пакеты и ключи репозиториев хосты скачивали напрямую с внешних сайтов, и работа ломалась при сетевых ограничениях и геоблокировках; единого каталога сервисов и учёта бэкапов не было.

Стало: мы сделали пять сервисов и утилит с документацией, Docker-сборкой и CI. Кэширующие прокси с метриками Prometheus развёрнуты и полностью используются во всех затронутых отделах компании. Зеркалирование образов работает для пяти проектов, расширение планируется. Портал-каталог сервисов получил вкладку статуса бэкапов, проекты в него наполняются. Заготовки каталога и документации создаются массово через Merge Request.

Результатом работ стали:
  • меньше ручных операций при доставке образов, пакетов и ключей в закрытые контуры;
  • сервисы и каталог с документацией, которую можно передать другому инженеру;
  • по нашей оценке, без агента пришлось бы привлекать разработчиков и отвлекать сотрудника от основной работы; в сумме по пяти проектам сэкономлено около трёх месяцев «классической» разработки;
  • портал-каталог развивается без отдельной команды разработки, хотя это фреймворк, который нужно постоянно наполнять плагинами и интеграциями.

Период работы:

Март — август 2026: активная разработка, затем доработки.

Команда:

DevOps-инженер, тимлид DevOps - приемка работ.

Инструменты:

  • Claude Code
  • Go
  • Python
  • TypeScript
  • Docker и Docker Compose
  • GitLab CI
  • Prometheus
  • MkDocs
  • Backstage
  • PostgreSQL
  • S3-совместимое хранилище

Решение:

Как устроена работа с агентом

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

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

Границы мы задали правилами: «минимальные изменения», запрет на новые публичные эндпоинты без явного запроса, запрет на коммиты и изменения CI без команды инженера. Агент работает без запросов подтверждения на каждое действие, поэтому контроль держится на четырёх вещах: списке запрещённых команд и путей, правилах в репозитории, подтверждении плана инженером и приёмке результата руководителем DevOps.

Что мы сделали

  1. Зеркалирование образов и Helm-чартов. Мы написали утилиту на Go с командами проверки и копирования, режимом HTTP-сервиса и метриками. Список образов и чартов ведётся в декларативном манифесте, и команды правят его через Merge Request: на запросе манифест проверяется, а на основной ветке запускается копирование. Утилита поддерживает стратегии выбора тегов, фильтр платформ, повторы с задержкой, доступ к внешним источникам через HTTP-, HTTPS- и SOCKS5-прокси и реестры без валидного TLS. Проверяем её unit и black-box тестами на реальном реестре, без программных заглушек.
  2. Кэширующий прокси для пакетов Alpine Linux. Теперь хосты обращаются не к внешнему CDN, а к прокси: пакет скачивается один раз и хранится на диске, а индексы и подписи прокси всегда берёт свежими. Для эксплуатации мы добавили административный API (готовность, статистика, очистка кэша) и метрики: сколько пакетов отдано из кэша, сколько пришлось скачивать заново и сколько места занимает кэш.
  3. Кэширующий прокси для публичных GPG-ключей репозиториев. Прокси запрашивает ключ только по HTTPS и хранит его на диске или в S3-совместимом хранилище. Когда срок кэша истекает, ключ перепроверяется по SHA-256. Если источник вернул некорректный ключ, рабочая копия не затирается, а клиент получает ошибку. Пути запросов проверяются, чтобы сервис нельзя было использовать как открытый прокси. Позже мы добавили проверку актуальности ключа по ETag.
  4. Портал-каталог сервисов. Мы развернули портал со входом через GitLab. Каталог обновляется из репозиториев по расписанию и по событию коммита, а документация лежит рядом с кодом. Например, для учёта бэкапов, мы дописали плагин: DevOps-скрипты отправляют результат копирования по HTTP, и на карточке ресурса появляется вкладка с историей, критичностью, расписанием и сроком хранения. Записать результат можно только с токеном этого ресурса из каталога.
  5. Массовая заготовка каталога и документации. Чтобы наполнять портал без ручной работы в каждом проекте, мы сделали CLI. Он создаёт в проектах GitLab ветку с описанием сервиса и каркасом документации и открывает Merge Request. Архивные и пустые проекты и уже описанные сервисы CLI пропускает, проекты обрабатывает параллельно, а настройки можно переопределить для конкретного проекта.

Что нашли по ходу и как проверили

  • Библиотека работы с реестрами сама добавляла к официальным образам Docker Hub лишний уровень пути. Прежде чем править, агент проверил поведение на реальном вызове и выяснил, что лишний уровень появляется только у имён из одного сегмента. Сначала тест воспроизвёл ошибку, затем мы её исправили.
  • Когда добавляли поддержку реестров без TLS, выяснилось, что вызовы приёмника и перебор тегов не используют настроенный транспорт. Мы исправили это в той же задаче, чтобы не оставлять недоработанный путь.
  • Сервисы кэширования мы сразу готовили к эксплуатации: JSON-логи в stdout, метрики, отдельные хелсчеки: жив ли сервис и готов ли он принимать запросы.

Итог

Один DevOps-инженер вместе с ИИ-агентом закрыл пробелы инфраструктуры, на которые иначе пришлось бы отвлекать разработчиков: сделал пять сервисов и утилит с документацией, Docker-сборкой и CI. Код писал агент, а решения, план и приёмка оставались за людьми. Кэширующие прокси уже работают в отделах компании, зеркалирование используют пять проектов и круг будет расширяться, а портал-каталог мы продолжаем развивать без отдельной команды разработки.
Обсудить проект _
Если у вас есть ИТ-проблема, оставьте свои контакты, и мы поможем спланировать ее решение. Обещаем не рассылать спам.
hello@softwarecats.dev
Новосибирск, ул. Демакова
23/5, оф.308
Контакты _

Еще про наши проекты: