
ИИ-навыки в CI: импровизация внутри конечного автомата
Разработка — это не только написание кода. Автоматизации покрывают задачи, выполнение которых укладывается в фиксированные шаги. Собрать проект, прогнать тесты, передать результат дальше: такой процесс можно представить как конечный автомат с формализованными состояниями и переходами. Но есть задачи, которые автоматизировать классическими средствами сложнее. Как правило, они требуют анализа ситуации и учёта контекста: содержимого кода, результатов проверок и других данных из репозитория.
Здесь в игру вступает ИИ-навык, гибкий исполнитель, который сам решает, как действовать в рамках задачи. Упрощённо навык похож на промпт — набор инструкций для модели, к которому могут добавляться параметры, наследование и другие настройки. Его можно один раз собрать под конкретную задачу, запускать снова и снова при необходимости и получать ожидаемый результат. ИИ-навыки уже знакомы пользователям по чату платформы, а теперь их можно встроить непосредственно в пайплайн и автоматически запускать по заданному триггеру.
В этой статье расскажу о сценариях использования ИИ-навыков в CI и о том, как сочетать лучшее из двух непохожих миров: детерминированность и последовательность конечных автоматов с адаптивностью ИИ.
Как устроен ИИ-навык в CI
В чате платформы навык отрабатывает прямо в окошке диалога. В CI всё иначе: навык вызывается из кубика и выполняется на той же машине (воркере), где и CI-задание. Поэтому ему сразу доступно всё окружение задания: файлы репозитория, Git-история, Docker®-образы, логи предыдущих шагов. Как и любой другой кубик, его можно добавить в нужный рабочий процесс. Переходим к примерам.
Генерируем описание пул-реквеста
Описание предложения изменений — та задача, которую легко поручить ИИ. В интерфейсе SourceCraft для этого есть кнопка «Создать с помощью ИИ». Она работает по единым правилам для всех, а командам бывает важно отдельно подсвечивать значимые изменения по своим инструкциям. Как ни странно, такая маленькая автоматизация оказалась довольно популярной в повседневной работе.
Для простого примера возьмём готовый системный навык pr-description и добавим его в пайплайн как отдельный шаг. Системные навыки доступны в любом репозитории без предварительного импорта. Инструкции в нём такие:
- Сначала напиши краткое описание изменений — не больше 5 предложений, цельным текстом, без маркированного списка.
- Затем отдельным блоком перечисли основные изменения маркированным списком. Блок подпиши «Основные изменения:» без форматирования.
Для запуска навыка добавьте в конфигурацию кубик с параметром skill и укажите служебное имя навыка pr-description.
on:
pull_request: generate-pr-description
workflows:
generate-pr-description:
tasks:
- name: generate-description
cubes:
- name: generate-description
skill: pr-description
# with:
# description_format: "..." # необязательный параметр
Когда разработчик публикует предложение изменений, CI/CD запускает навык, который анализирует изменения и формирует описание — останется только проверить и при необходимости поправить текст.
Проверяем пул-реквесты по правилам команды
Когда в команде есть строгие правила и стандарты ревью, чтобы не держать все требования в голове и придерживаться единого подхода, часть проверок можно автоматизировать с помощью ИИ.
Для этого выносим правила ревью в пользовательский навык и запускаем его в отдельном рабочем процессе, который срабатывает при создании предложения изменений. Навык выполняется в CI-задании, что даёт ему доступ не только к диффу самого изменения, но и к полному набору файлов репозитория. Это позволяет учитывать больше контекста при ревью.
Результат ревью публикуется на странице предложения изменений. Это может сделать сам навык — вызвать REST API SourceCraft, используя токен $SOURCECRAFT_TOKEN, доступный внутри CI, — или отдельный кубик, который опубликует результат через ту же ручку.
Ищем причину редких падений тестов
Иногда тест падает настолько редко, что воспроизвести проблему сложно. В таком случае первичный анализ можно поручить ИИ-навыку.
После теста добавляем кубик с навыком и задаём условие if: failure(). Если предыдущие кубики завершились с ошибкой, «скиловый» кубик запускает навык для отладки.
В инструкции для навыка задаём цель и то, что нужно сделать: найти возможную причину падения, проверить несколько гипотез или предложить варианты исправления.
ИИ самостоятельно изучает файлы и Git-историю, сопоставляет их с результатами выполнения и проводит первичный анализ проблемы. Навык выведет результат в лог кубика или сохранит его в файл и прикрепит как артефакт. В результате команда вместо ручного поиска по логам сразу получает первичный разбор причины падения и может перейти к исправлению.
Находим проблемы во время деплоя
Деплой может идти долго, а первые признаки проблемы могут появиться ещё до того, как CI зафиксирует ошибку. ИИ-навык можно запустить параллельно с деплоем и поручить ему следить за его ходом.
Навык работает в том же окружении, что и деплой. Например, если CI/CD выполняется на self-hosted-воркере внутри кластера Kubernetes®, каждое задание выполняется в отдельном поде. Навык может анализировать состояние кластера: готовность подов, их перезапуски и ошибки запуска контейнеров. Результат работы навыка передаётся дальше по пайплайну. Например, отдельный кубик отправляет его по настроенному каналу связи. Если появляются признаки проблемы, дежурный получит уведомление, не дожидаясь, пока деплой завершится с ошибкой.
Что в итоге
ИИ-навыки позволяют автоматизировать в CI то, что раньше требовало «ручного» анализа. Дальше всё зависит от вашей команды и задач, которые хочется снять с разработчиков.
