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

Подход работает на привычной связке GitLab CI и Docker-раннеров, без облачных платформ и без прямого доступа агента в открытый интернет, а значит, подходит командам, у которых инфраструктура живёт внутри контура.
Автор рецепта, QA-инженер, показывает схему на примере анализа автотестов, но тот же каркас годится для любой повторяющейся задачи, где не нужно писать код: генерация отчётов, мониторинг метрик, рассылка сводок. Ключевой инструмент, opencode-cli, консольная обёртка, которая умеет запускать ИИ-агента с жёстким конфигом, ограниченными правами и логированием в формате JSON.
Что понадобится?
- GitLab с настроенным CI/CD и Docker-раннерами
- opencode-cli (ставится через npm:
npm install --global opencode-ai) - Доступ к языковой модели через API (ключ передаётся переменной окружения)
- MCP-серверы (Model Context Protocol, протокол, через который агент обращается к внешним сервисам: системе управления тестами, мессенджеру и так далее)
- 30-60 минут на отладку первого навыка локально и ещё столько же на обвязку в CI
Пошаговая инструкция
1. Подготовьте навык и отладьте его на своей машине
Создайте репозиторий со следующей структурой:
├── .agents/skills/
│ └── nightly-test-run-analysis/SKILL.md
├── .env
├── .gitlab-ci.yml
├── AGENTS.md
├── opencode.json
└── opencode_config_nightly-test-run-analysis/opencode.json
Файл AGENTS.md описывает проект и инфраструктуру. Папки opencode_config_* хранят отдельный конфиг под каждую задачу. В небольшой команде одного такого репозитория хватит на всех.
Алгоритм отладки простой. Клонируйте репозиторий, добавьте нужные MCP-серверы в opencode.json, запустите сессию и дайте агенту задачу голосом: «проанализируй последний прогон автотестов». Получите результат, уточните формулировки, а в конце попросите агента оформить задачу как навык (skill). Пользуйтесь навыком несколько дней, правьте по мелочам, потом пушьте в общий репозиторий.
2. Составьте строгий конфиг для opencode
Для каждой задачи создавайте отдельный файл opencode.json. В нём явно указывайте модель, провайдера, набор MCP-серверов и, самое главное, лимит шагов:
"agent": {
"build": {
"steps": 50
}
}
Подбирайте число шагов по логам выполнения аналогичной задачи. Секреты передавайте через переменные окружения: "apiKey": "{env:API_KEY}".
В секции permission сначала запретите всё, а потом точечно разрешите только нужные инструменты:
"permission": {
"*": "deny",
"external_directory": "deny",
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny"
},
"glob": "allow",
"grep": "allow",
"skill": "allow",
"TestOps__testops_find_launches": "allow"
}
Принцип «запрещено всё, что не разрешено явно» здесь критически важен: агент не должен иметь доступ к файлам с секретами и к инструментам, которые ему не нужны.
3. Пробросьте токены и секреты в джобу
Стандартный путь: Settings, CI/CD, Variables на уровне проекта или Vault на уровне джобы. Каждый токен выдавайте с минимальными правами и под конкретную задачу.
4. Настройте джобу в .gitlab-ci.yml
check_nightly_tests:
stage: ai-agent
image: node:24-alpine3.22
timeout: 5 minutes
variables:
OPENCODE_CONFIG: "$CI_PROJECT_DIR/opencode_config_nightly-test-run-analysis/opencode.json"
OPENCODE_DISABLE_PROJECT_CONFIG: "1"
OPENCODE_DISABLE_AUTOUPDATE: "1"
OPENCODE_DISABLE_LSP_DOWNLOAD: "1"
OPENCODE_DISABLE_MODELS_FETCH: "1"
before_script:
- npm install --global opencode-ai
script:
- opencode --version
- 'opencode run -m "$OPENCODE_MODEL" --print-logs --format json "Используй скилл testops-launch-report для анализа последнего ночного прогона и напиши отчет в канал Nightly tests"'
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule" && $CHECK_NIGHTLY_TEST == "True"'
when: always
- when: manual
allow_failure: true
На что обратить внимание:
- Образ берите минимальный. Alpine меньше по размеру, быстрее стартует и оставляет меньше поверхности для атаки.
timeoutс запасом. Агент может «зависнуть» на шаге, и без таймаута джоба съест весь лимит раннера.OPENCODE_DISABLE_PROJECT_CONFIG: "1"заставляет opencode читать только указанный конфиг, а не собирать его из четырёх мест.--print-logs --format jsonдаёт подробный лог в машиночитаемом формате, без него отладка превращается в гадание.when: manualобязателен, чтобы джоба не запускалась при каждом пуше.
5. Настройте расписание
В GitLab: Build, Pipeline schedules. Создайте расписание и добавьте переменную из блока rules (в примере это CHECK_NIGHTLY_TEST) со значением True. Так шедулер запускает только нужную джобу, а не весь пайплайн.
6. Проверьте сетевые ограничения
Убедитесь, что на уровне Docker-раннера или Kubernetes настроены сетевые политики. Агент не должен иметь прямого выхода в открытый интернет. Настраивать фаервол внутри контейнера ненадёжно: контейнер эфемерен, и правила легко обойти. Лимит шагов из конфига дополнительно снижает вероятность «побега» агента через промежуточные сервисы.
Команда QA настроила навык testops-launch-report. Каждую ночь по расписанию GitLab CI запускает джобу. Агент через MCP-сервер обращается к системе управления тестами, забирает статистику последнего прогона, находит упавшие кейсы, группирует их по компонентам и отправляет готовую сводку в канал мессенджера «Nightly tests». Инженер утром видит отчёт, а не сырой лог на 200 строк. Промпт (текстовая инструкция агенту) при запуске выглядит ровно так, как в примере конфига выше: одна строка с указанием навыка и канала.
- Не ограничили шаги агента. Без параметра
stepsагент может зациклиться и съесть весь таймаут, а вместе с ним лимит API-ключа. - Оставили
"*": "allow"в правах. Агент получает доступ к.env-файлам и любым инструментам. Всегда начинайте с"*": "deny". - Собирают конфиг из нескольких мест. Без флага
OPENCODE_DISABLE_PROJECT_CONFIGopencode смешивает четыре источника конфигов, и поведение агента становится непредсказуемым. - Пытаются настроить фаервол внутри контейнера. Это ненадёжно. Сетевые ограничения работают на уровне оркестратора (Docker network policy, Kubernetes NetworkPolicy), а не внутри эфемерного контейнера.
- Выдают агенту широкий API-токен. Токен должен давать доступ только к тем эндпоинтам, которые нужны конкретному навыку, не больше.
Что это даёт вам на практике?
QA-инженеру и разработчику. Ночной анализ тестов больше не требует ручного разбора. Навык пишется один раз, дальше работает по расписанию. Подход переносится на любую рутину, где вход и выход предсказуемы.
Тимлиду и менеджеру. Команда получает утренние сводки без участия дежурного. Если у вас в компании уже крутятся языковые модели на своих серверах, дополнительных затрат на подписки нет.
Автору Дзена и маркетологу. Пока что такое «что такое ИИ-агент» остаётся инженерной территорией. Но сама механика, навык плюс расписание плюс мессенджер, легко адаптируется: агент может собирать статистику по публикациям, мониторить позиции или генерировать черновики отчётов. В России для экспериментов доступны YandexGPT и GigaChat, оба поддерживают API-вызовы. Opencode-cli при этом требует совместимого API, поэтому перед стартом проверьте, работает ли выбранная модель с opencode напрямую.
Начните с одного навыка, который вы уже выполняете руками каждый день: утренний отчёт, сводка метрик, проверка статуса деплоя. Не пытайтесь сразу автоматизировать сложные цепочки: чем проще вход и выход, тем предсказуемее результат. По моему опыту, первый навык отлаживается за час-два, а экономит 15-20 минут ежедневно. Честная оговорка: агент работает ровно настолько хорошо, насколько точно написан навык. Если SKILL.md размыт, агент будет галлюцинировать (уверенно выдумывать шаги, которых не было в задаче). Держите навыки короткими и конкретными, а лимит шагов жёстким.
Попробуйте AI-инструменты dzen.guru
Разбираем нейросети на практике и показываем, как встроить их в ежедневную работу автора и маркетолога
Перейти на dzen.guru
Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также

Эпоха нооцена: почему ИИ-лаборатории нанимают философов вместо программистов
Британский The Economist зафиксировал парадокс: философы востребованнее программистов в ИИ-лабораториях, а профессор Михаил Эпштейн предложил считать запуск…

Что такое ИИ-агент изнутри: собираем цикл ReAct на Python без фреймворков
Разбираться в том, что такое ИИ-агент, проще всего на конкретной схеме: системный промпт задаёт роль, модель выбирает действие, код его выполняет, результат…
ИИ в бизнесе: McKinsey зафиксировала разрыв между пилотами и реальной отдачей
Компания McKinsey в мае 2025 года опубликовала обновлённый обзор о том, как организации по всему миру внедряют искусственный интеллект, и зафиксировала разрыв…
Комментарии