Игорь Градов
Игорь Градов
6 мин
ai

Что такое ИИ-агент в CI: автоанализ тестов без облака за 60 минут

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

Что такое ИИ-агент в CI: автоанализ тестов без облака за 60 минут
Почему это важно

Подход работает на привычной связке 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_CONFIG opencode смешивает четыре источника конфигов, и поведение агента становится непредсказуемым.
  • Пытаются настроить фаервол внутри контейнера. Это ненадёжно. Сетевые ограничения работают на уровне оркестратора (Docker network policy, Kubernetes NetworkPolicy), а не внутри эфемерного контейнера.
  • Выдают агенту широкий API-токен. Токен должен давать доступ только к тем эндпоинтам, которые нужны конкретному навыку, не больше.

Что это даёт вам на практике?

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

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

Автору Дзена и маркетологу. Пока что такое «что такое ИИ-агент» остаётся инженерной территорией. Но сама механика, навык плюс расписание плюс мессенджер, легко адаптируется: агент может собирать статистику по публикациям, мониторить позиции или генерировать черновики отчётов. В России для экспериментов доступны YandexGPT и GigaChat, оба поддерживают API-вызовы. Opencode-cli при этом требует совместимого API, поэтому перед стартом проверьте, работает ли выбранная модель с opencode напрямую.

Совет редакции dzen.guru

Начните с одного навыка, который вы уже выполняете руками каждый день: утренний отчёт, сводка метрик, проверка статуса деплоя. Не пытайтесь сразу автоматизировать сложные цепочки: чем проще вход и выход, тем предсказуемее результат. По моему опыту, первый навык отлаживается за час-два, а экономит 15-20 минут ежедневно. Честная оговорка: агент работает ровно настолько хорошо, насколько точно написан навык. Если SKILL.md размыт, агент будет галлюцинировать (уверенно выдумывать шаги, которых не было в задаче). Держите навыки короткими и конкретными, а лимит шагов жёстким.

Попробуйте AI-инструменты dzen.guru

Разбираем нейросети на практике и показываем, как встроить их в ежедневную работу автора и маркетолога

Перейти на dzen.guru
Поделиться:TelegramVK
Игорь Градов
Игорь Градов

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».

Комментарии

Читайте также

Эпоха нооцена: почему ИИ-лаборатории нанимают философов вместо программистов
ai

Эпоха нооцена: почему ИИ-лаборатории нанимают философов вместо программистов

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

5 мин
Что такое ИИ-агент изнутри: собираем цикл ReAct на Python без фреймворков
ai

Что такое ИИ-агент изнутри: собираем цикл ReAct на Python без фреймворков

Разбираться в том, что такое ИИ-агент, проще всего на конкретной схеме: системный промпт задаёт роль, модель выбирает действие, код его выполняет, результат…

7 мин
ai

ИИ в бизнесе: McKinsey зафиксировала разрыв между пилотами и реальной отдачей

Компания McKinsey в мае 2025 года опубликовала обновлённый обзор о том, как организации по всему миру внедряют искусственный интеллект, и зафиксировала разрыв…

4 мин