Claude Certified Architect · Модуль 3 · Урок 3.6

Интеграция в конвейер CI/CD

Суть

Флаг -p (или --print) обязателен для неинтерактивного CI/CD: без него конвейер зависает, ожидая ввода. --output-format json с --json-schema даёт структурированный вывод для автоматических инлайн-комментариев в PR.

Batch против real-time и дедупликация

Batch API (до 24ч задержки, экономия 50%) уместен для неблокирующих асинхронных задач; для блокирующих pre-merge проверок нужен real-time. При повторных прогонах включайте прежние находки в контекст и просите сообщать только новые/нерешённые — иначе дубли комментариев. Ревью кода ведите независимым инстансом (не той сессией, что писала код) — ради непредвзятости.

Вызов Claude Code в CI/CD
# Верно: неинтерактивный режим со структурированным выводом
claude -p "Проанализируй этот pull request на проблемы безопасности" \
  --output-format json \
  --json-schema review-schema.json

# Неверно: зависнет в ожидании интерактивного ввода
claude "Проанализируй этот pull request на проблемы безопасности"

Anti-patterns

ЛовушкаПочему не работаетВерный паттерн
Конвейер завис → выставить CLAUDE_HEADLESS=trueТакой переменной не существует — правдоподобный отвлекающий вариантФлаг -p: claude -p "prompt"
Конвейер завис → перенаправить stdin из /dev/nullUnix-обходник не учитывает дизайн интерактивного режима — поведение неопределеноФлаг -p — документированный неинтерактивный режим
Перевести блокирующие pre-merge проверки на Batch ради экономииBatch — до 24ч без SLA; разработчики не дождутсяPre-merge — real-time; Batch — лишь для неблокирующего (ночные отчёты)
Повторный прогон ревью без прежних находок в контекстеClaude переотметит те же проблемы как новые — дубли комментариевВключить прежние находки; просить лишь новые/нерешённые

Exam traps

ЛовушкаПочему не работаетВерный паттерн
Путать -p с несуществующими флагами/переменнымиCLAUDE_HEADLESS, --batch для этого не существуютТолько -p/--print
Batch для чувствительных к задержке блокирующих задачДо 24ч без SLABatch — неблокирующее; real-time — блокирующее
Ревью кода той же сессией, что писала кодВносит предвзятостьНезависимый инстанс ревью

Практическое задание (T6)

  • Написать шаг CI с вызовом Claude Code через -p; проверить, что джоба завершается без зависания.
  • Добавить --output-format json --json-schema; распарсить вывод и постить находки инлайн-комментариями в PR.
  • Реализовать дедупликацию: включать прежние находки при повторе; проверить, что постятся лишь новые.
  • Генерация тестов: подать в контекст существующие тесты; проверить отсутствие дублей сценариев.
  • Распределить стоимость: какие шаги можно на Batch (ночью), какие должны остаться real-time (блокирующие ворота).

Проверка знаний

Claude Code в CI/CD

Скрипт конвейера запускает claude "Проанализируй этот PR на проблемы безопасности", но джоба зависает. Логи показывают ожидание интерактивного ввода. Верное решение?

  • A Добавить флаг -p: claude -p "..."
  • B Выставить переменную CLAUDE_HEADLESS=true перед запуском
  • C Перенаправить stdin из /dev/null: claude "..." < /dev/null
  • D Добавить флаг --batch: claude --batch "..."

Claude Code в CI/CD

Два автоматизированных процесса: (1) блокирующая pre-merge проверка безопасности, которую ждут перед мержем, и (2) отчёт о техдолге, генерируемый ночью к утреннему стендапу. Менеджер предлагает перевести оба на Message Batches API ради экономии 50%. Как ответить?

  • A Batch только для ночного отчёта о техдолге; pre-merge оставить real-time — у Batch до 24ч задержки без SLA, что несовместимо с блокирующим процессом
  • B Перевести оба на batch с опросом статуса каждые несколько минут
  • C Оставить real-time для обоих — результаты batch нельзя сопоставить с исходными запросами
  • D Перевести оба на batch с откатом на real-time через 30 минут, если не завершилось

Claude Code в CI/CD

Ночной аудит безопасности: claude -p "Аудит $(git diff HEAD~7) на проблемы безопасности". После обновления библиотеки добавились 14 файлов, diff превысил 80 000 токенов, аудит начал падать по тайм-ауту. Нужно сохранить полное недельное покрытие и убрать тайм-аут. Верный архитектурный подход?

  • A Поднять тайм-аут CI с 5 до 30 минут под большие недельные diff
  • B Сменить HEAD~7 на HEAD~1, ограничив аудит изменениями последнего дня
  • C Добавить предобработку, дробящую diff на куски по файлу/компоненту, запускать параллельные claude -p по каждому куску и агрегировать находки финальным шагом
  • D Перейти с claude -p на Message Batches API, чтобы большой diff обрабатывался асинхронно без тайм-аута конвейера