ИИ для CI/CD
Агент пишет пайплайны, чинит падающие джобы и оптимизирует деплой — CI/CD перестаёт быть чёрным ящиком
×5
быстрее написание пайплайна с агентом
70%
меньше времени на отладку CI
10 мин
pipeline с нуля вместо часа
Знакомо?
🔴
Pipeline падает — непонятно почему
Билд красный, лог на 500 строк, ошибка где-то в середине. Ищешь 20 минут, оказывается — кэш протух или версия ноды не та. Каждый раз — квест.
📝
YAML-конфиг на 300 строк — страшно трогать
Pipeline разросся: матрицы, условия, артефакты, секреты. Добавить один шаг — и ломается всё. Документация GitHub Actions — талмуд, GitLab CI — другой талмуд.
⏱️
Деплой занимает 40 минут
Docker build каждый раз с нуля, тесты запускаются последовательно, кэш не работает. Знаешь что можно ускорить, но не понимаешь как именно в этом конкретном YAML.
🔀
Миграция между CI-системами
Нужно перенести пайплайн из Jenkins в GitHub Actions. Или из GitLab CI в GitHub. Синтаксис разный, концепции разные, переписывать с нуля — неделя работы.
Как DevOps-инженеры используют агента для CI/CD
1
Стартап — CI/CD с нуля на GitHub Actions
Команда из 5 разработчиков, монорепо на TypeScript. Не было CI/CD — деплоили руками через SSH. С агентом настроили полный pipeline за один день.
Настройка
👤
Пользователь
У нас стартап, 5 разработчиков, монорепо: API (NestJS), фронт (Next.js), мобилка (React Native). Деплоим руками через SSH: build локально → scp на сервер → pm2 restart. Хотим нормальный CI/CD на GitHub Actions. С чего начать?
🤖
Агент
🚀 План CI/CD для стартапа — от нуля до автодеплоя:
Текущее состояние: ручной деплой → ~30 мин + риск ошибки
Цель: push → автотесты → автодеплой → 0 минут ручной работы
План на 1 день (4 этапа):
Этап 1 (1 час): Базовый CI
• Линтинг + тесты при каждом PR
• Блок мержа без зелёного билда
Этап 2 (2 часа): Docker + Registry
• Dockerfile для API и фронта
• Push образов в GHCR
Этап 3 (2 часа): Автодеплой
• SSH-деплой из GitHub Actions (docker pull + restart)
• Staging при push в develop, production при тэге
Этап 4 (1 час): Мониторинг
• Slack-уведомления о деплоях
• Rollback при неудачном health check
Начнём с этапа 1 — пришлите структуру package.json и какие тесты уже есть.
Ежедневное использование
👤
Пользователь
Этап 1 и 2 настроили за полдня, всё работает! Но деплой на staging падает: "Error: Connection refused" при SSH-подключении из GitHub Actions. Ключ добавил в секреты. В чём проблема?
🤖
Агент
🔐 SSH из GitHub Actions — типичные проблемы:1. Формат ключа (90% случаев):• GitHub Secrets обрезают trailing newline
• SSH требует
\n в конце ключа
• Решение: используй
appleboy/ssh-action@v1 — он обрабатывает это автоматически
2. Known hosts:• Runner не знает ваш сервер → отклоняет подключение
• Решение:
ssh-keyscan -H your-server.com >> ~/.ssh/known_hosts3. Firewall / порт:• Сервер на нестандартном порту?
• GitHub Actions IP не в allowlist?
Рабочий шаблон:- uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SERVER_HOST }}
username: deploy
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: ${{ secrets.SERVER_PORT }}
script: |
docker pull ghcr.io/yourorg/api:${{ github.sha }}
docker stop api || true
docker run -d --name api --restart unless-stopped \
-p 3000:3000 ghcr.io/yourorg/api:${{ github.sha }}
Проверьте:
ssh -i key -p PORT user@host echo ok — работает ли вручную с того же ключа?
2
Команда из 20 человек — оптимизация GitLab CI
Pipeline на 45 минут, 12 микросервисов, shared runners перегружены. С агентом сократили до 12 минут и настроили параллельные сборки.
Настройка
👤
Пользователь
GitLab CI, 12 микросервисов, pipeline — 45 минут. Shared runners, очередь на билд иногда 10 минут. Тесты последовательно, docker build без кэша. Бюджет на self-hosted runner есть, но не знаем как настроить. Помоги оптимизировать.
🤖
Агент
⚡ План оптимизации GitLab CI — цель: 45 мин → 12 мин
Аудит текущего pipeline:
• Последовательные тесты: ~20 мин → параллельно: ~7 мин
• Docker build без кэша: ~15 мин → с кэшем: ~3 мин
• Очередь runners: ~10 мин → self-hosted: ~0 мин
3 направления оптимизации:
1️⃣ Параллелизация (бесплатно, сразу):
• parallel: для тестов — разбить на 4 шарда
• needs: вместо stages: — DAG-пайплайн
• Независимые сервисы собираются одновременно
2️⃣ Кэширование Docker (сразу):
• --cache-from из registry
• Kaniko вместо docker-in-docker (безопаснее + кэш)
3️⃣ Self-hosted runner (1-2 часа):
• GitLab Runner на вашем сервере
• Docker executor с overlay2
• Подготовлю скрипт установки
Пришлите текущий .gitlab-ci.yml — покажу конкретные изменения с оценкой выигрыша по каждому.
Ежедневное использование
👤
Пользователь
Настроили параллельные джобы и кэш — уже 18 минут вместо 45! Но теперь проблема: 3 сервиса зависят от общей библиотеки. Если она изменилась — нужно пересобрать все три. Как это сделать в GitLab CI?
🤖
Агент
🔗 Зависимости между сервисами в GitLab CI:Решение: rules: + changes: + trigger:# .gitlab-ci.yml
stages: [detect, build, deploy]
detect-changes:
stage: detect
script:
- echo "Detecting changed paths..."
rules:
- changes: [shared-lib/**]
variables:
REBUILD_DEPENDENTS: "true"
build-service-a:
stage: build
rules:
- changes: [service-a/**]
- changes: [shared-lib/**] # пересборка при изменении библиотеки
script:
- docker build -t registry/service-a:$CI_COMMIT_SHA service-a/
build-service-b:
stage: build
rules:
- changes: [service-b/**]
- changes: [shared-lib/**]
script:
- docker build -t registry/service-b:$CI_COMMIT_SHA service-b/
📌
rules: changes: с несколькими условиями работает как OR — джоба запустится если изменился свой код ИЛИ shared-lib.
⚠️ При merge request pipeline
changes: сравнивает с target branch. При push — с предыдущим коммитом. Учитывайте это при сквош-мержах.
3
Соло-разработчик — автодеплой pet-проекта
Один разработчик, VPS за 500₽, Next.js приложение. С агентом настроил полный CI/CD за вечер — push в main = автодеплой за 3 минуты.
Настройка
👤
Пользователь
У меня pet-проект на Next.js, деплою на VPS (Ubuntu, 2GB RAM). Сейчас: ssh → git pull → npm build → pm2 restart. Хочу автодеплой при push в main. Бюджет — 0, только GitHub бесплатный план.
🤖
Агент
🚀 Бесплатный CI/CD для pet-проекта:GitHub Actions бесплатный план: 2000 минут/месяц — более чем достаточно для pet-проекта.
Схема: push в main → GitHub Actions → SSH на VPS → pull + build + restart
1. Подготовка VPS (один раз, 5 мин):# Создаём deploy-пользователя
adduser deploy --disabled-password
su - deploy
ssh-keygen -t ed25519 -f ~/.ssh/deploy_key -N ""
cat ~/.ssh/deploy_key.pub >> ~/.ssh/authorized_keys
2. GitHub Secrets:•
VPS_HOST — IP сервера
•
VPS_KEY — содержимое deploy_key (приватный)
•
VPS_USER — deploy
3. Workflow (.github/workflows/deploy.yml):name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USER }}
key: ${{ secrets.VPS_KEY }}
script: |
cd ~/myapp
git pull origin main
npm ci --production
npm run build
pm2 restart myapp
Готово — 15 строк YAML, 0₽, автодеплой за ~2-3 минуты. Пришлите IP сервера — проверим SSH-подключение.
Ежедневное использование
👤
Пользователь
Работает! Но хочу добавить проверку: если build упал — не рестартовать pm2, чтобы старая версия продолжала работать. И уведомление в Telegram при деплое.
🤖
Агент
✅ Безопасный деплой + Telegram-уведомления:name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USER }}
key: ${{ secrets.VPS_KEY }}
script: |
cd ~/myapp
git pull origin main
npm ci --production
# Build в отдельную директорию — если упадёт, старый .next останется
if npm run build; then
pm2 restart myapp
echo "✅ Deploy successful"
else
echo "❌ Build failed, keeping old version"
exit 1
fi
- name: Telegram notification
if: always()
uses: appleboy/telegram-action@master
with:
to: ${{ secrets.TELEGRAM_CHAT_ID }}
token: ${{ secrets.TELEGRAM_BOT_TOKEN }}
message: |
${{ job.status == 'success' && '✅' || '❌' }} Deploy ${{ job.status }}
Commit: ${{ github.event.head_commit.message }}
Author: ${{ github.actor }}
📌
if: always() — уведомление придёт и при успехе, и при ошибке. Для Telegram: создайте бота через
@BotFather, получите chat_id через
@userinfobot.
Вопросы про ИИ для CI/CD
Агент поддерживает GitHub Actions и GitLab CI?
Да. А также Jenkins, CircleCI, Bitbucket Pipelines, Azure DevOps и другие. Агент знает синтаксис и best practices каждой платформы.
Можно конвертировать pipeline между платформами?
Да. Пришлите Jenkinsfile — агент переведёт в GitHub Actions. Или наоборот. С сохранением логики, секретов и условий.
Агент может запускать pipeline?
Нет. Агент генерирует конфигурации и помогает отлаживать. Запуск pipeline — в вашем CI/CD инструменте. Агент может выполнить команды для проверки через терминал.
Подходит для Kubernetes-деплоя?
Да. Агент поможет с Helm-чартами, Kustomize, ArgoCD манифестами и kubectl-командами в pipeline.
Безопасно ли показывать секреты агенту?
Агент работает в изолированном контейнере. Но секреты лучше хранить в CI/CD платформе (GitHub Secrets, GitLab CI/CD Variables) — агент покажет как их подключить, не видя значений.