Деплой на Vercel с токен-аутентификацией без интерактивного логина: проверка токенов в env, CI/CD паттерны и автоматизация.
npx -y skills add vercel-labs/agent-skills --skill vercel-cli-with-tokens --agent claude-codeДеплой и управление проектами на Vercel через CLI с токен-аутентификацией — без интерактивного vercel login.
Перед любыми командами Vercel CLI определите источник токена. Проверяйте сценарии по порядку.
VERCEL_TOKEN уже задан в окруженииprintenv VERCEL_TOKEN
Если команда вернула значение — переходите к шагу 2.
.env под именем VERCEL_TOKENgrep '^VERCEL_TOKEN=' .env 2>/dev/null
Если найден — экспортируйте:
export VERCEL_TOKEN=$(grep '^VERCEL_TOKEN=' .env | cut -d= -f2-)
.env под другим именемИщите переменную с токеном Vercel (обычно начинается с vca_):
grep -i 'vercel' .env 2>/dev/null
Найдите нужную переменную и экспортируйте её как VERCEL_TOKEN:
export VERCEL_TOKEN=$(grep '^<VARIABLE_NAME>=' .env | cut -d= -f2-)
Если ни один из способов не дал результата, попросите пользователя предоставить токен. Создать токен можно на vercel.com/account/tokens.
Важно: после экспорта VERCEL_TOKEN Vercel CLI читает его автоматически — не передавайте токен через флаг --token. Секреты в аргументах командной строки видны в истории shell и списке процессов.
# Плохо — токен виден в истории shell и процессах
vercel deploy --token "vca_abc123"
# Хорошо — CLI читает VERCEL_TOKEN из окружения
export VERCEL_TOKEN="vca_abc123"
vercel deploy
# Проверить окружение
printenv VERCEL_PROJECT_ID
printenv VERCEL_ORG_ID
# Или .env файл
grep -i 'vercel' .env 2>/dev/null
Если есть URL проекта (например, https://vercel.com/my-team/my-project), извлеките slug команды:
echo "$PROJECT_URL" | sed 's|https://vercel.com/||' | cut -d/ -f1
Если VERCEL_ORG_ID и VERCEL_PROJECT_ID заданы — экспортируйте их вместе (оба обязательны; один без другого вызывает ошибку):
export VERCEL_ORG_ID="<org-id>"
export VERCEL_PROJECT_ID="<project-id>"
npm install -g vercel
vercel --version
По умолчанию всегда деплоить как preview — в production только по явному запросу.
# Прямой деплой
vercel deploy -y --no-wait
# С командой
vercel deploy --scope <team-slug> -y --no-wait
# Production (только по явному запросу)
vercel deploy --prod --scope <team-slug> -y --no-wait
# Статус деплоя
vercel inspect <deployment-url>
# Есть ли git remote?
git remote get-url origin 2>/dev/null
# Уже привязан к Vercel?
cat .vercel/project.json 2>/dev/null || cat .vercel/repo.json 2>/dev/null
# С git remote (предпочтительно) — читает remote и создаёт .vercel/repo.json
vercel link --repo --scope <team-slug> -y
# Без git remote — создаёт .vercel/project.json
vercel link --scope <team-slug> -y
# Привязка к конкретному проекту по имени
vercel link --project <project-name> --scope <team-slug> -y
A) Git Push Deploy — есть git remote (предпочтительно)
git add .
git commit -m "deploy: <описание изменений>"
git push
sleep 5
vercel ls --format json --scope <team-slug>
B) CLI Deploy — нет git remote
vercel deploy --scope <team-slug> -y --no-wait
vercel inspect <deployment-url>
# Для всех окружений
echo "value" | vercel env add VAR_NAME --scope <team-slug>
# Для конкретного окружения (production, preview, development)
echo "value" | vercel env add VAR_NAME production --scope <team-slug>
# Список переменных
vercel env ls --scope <team-slug>
# Скачать в .env.local
vercel env pull --scope <team-slug>
# Удалить переменную
vercel env rm VAR_NAME --scope <team-slug> -y
# Список последних деплоев
vercel ls --format json --scope <team-slug>
# Информация о деплое
vercel inspect <deployment-url>
# Логи сборки (требуется Vercel CLI v35+)
vercel inspect <deployment-url> --logs
# Runtime-логи запросов (живой стрим; --no-follow для снапшота)
vercel logs <deployment-url>
# Список доменов
vercel domains ls --scope <team-slug>
# Добавить домен (привязанная директория)
vercel domains add <domain> --scope <team-slug>
# Добавить домен (непривязанная директория)
vercel domains add <domain> <project> --scope <team-slug>
VERCEL_TOKEN через флаг --token. Экспортировать переменную и дать CLI прочитать её из окружения..env..vercel/ напрямую. CLI управляет этой директорией; читать можно.--format json для структурированного вывода.-y в командах с подтверждением, чтобы избежать интерактивной блокировки.printenv | grep -i vercel
grep -i vercel .env 2>/dev/null
Если CLI выдаёт Authentication required: токен мог истечь или стать недействительным. Проверьте: vercel whoami. Попросите пользователя предоставить свежий токен.
vercel whoami --scope <team-slug>
vercel inspect <deployment-url> --logs
Частые причины: отсутствуют зависимости в package.json; не заданы переменные окружения; неверная конфигурация фреймворка в vercel.json (Vercel автоопределяет Next.js, Remix, Vite из package.json).
npm install -g vercel