Deploy Hooks
Deploy Hooks — это специальные URL, которые позволяют триггерить деплои из внешних систем без настройки Git webhooks.
Когда использовать
Заголовок раздела «Когда использовать»- CI/CD пайплайны — деплой после успешных тестов
- CMS — деплой при обновлении контента
- Scheduled deployments — деплой по расписанию (cron)
- Manual triggers — кнопка деплоя в других системах
Создание Deploy Hook
Заголовок раздела «Создание Deploy Hook»-
Откройте настройки проекта
Перейдите в проект → Settings → Git
-
Найдите секцию Deploy Hooks
-
Нажмите “Create Hook”
-
Заполните форму
Поле Описание Name Название (для идентификации) Branch Ветка для деплоя Scope Production, Preview, или All -
Сохраните
ONREZA сгенерирует уникальный URL и токен
Формат URL
Заголовок раздела «Формат URL»https://api.onreza.ru/v1/hooks/{token}Где {token} — 64-символьная hex-строка (256 бит энтропии).
Использование
Заголовок раздела «Использование»curl -X POST https://api.onreza.ru/v1/hooks/{token} \ -H "Content-Type: application/json" \ -d '{ "commitSha": "abc123def456...", "branch": "main", "message": "Deploy from CI" }'GitHub Actions
Заголовок раздела «GitHub Actions»name: Deploy to ONREZA
on: workflow_dispatch: push: branches: [main]
jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Trigger Deploy Hook run: | curl -X POST "${{ secrets.ONREZA_DEPLOY_HOOK_URL }}" \ -H "Content-Type: application/json" \ -d "{\"commitSha\": \"${{ github.sha }}\", \"branch\": \"${{ github.ref_name }}\", \"message\": \"Deploy from GitHub Actions\"}"GitLab CI
Заголовок раздела «GitLab CI»deploy: stage: deploy script: - | curl -X POST "$ONREZA_DEPLOY_HOOK_URL" \ -H "Content-Type: application/json" \ -d "{\"commitSha\": \"$CI_COMMIT_SHA\", \"branch\": \"$CI_COMMIT_BRANCH\", \"message\": \"Deploy from GitLab CI\"}" only: - mainScheduled (cron)
Заголовок раздела «Scheduled (cron)»# crontab -e# Деплой каждый день в 3:000 3 * * * curl -X POST "https://api.onreza.ru/v1/hooks/YOUR_TOKEN" -H "Content-Type: application/json" -d '{"commitSha":"latest","branch":"main","message":"Scheduled deploy"}'Заголовок X-Workspace
Заголовок раздела «Заголовок X-Workspace»| Способ аутентификации | Требуется X-Workspace |
|---|---|
| Session (cookie) | Да |
| API ключ (nrz_*) | Нет (workspace в токене) |
| Device Flow | Нет (workspace в токене) |
Scope (Область)
Заголовок раздела «Scope (Область)»| Scope | Описание |
|---|---|
| Production | Создаёт production deployment |
| Preview | Создаёт preview deployment |
| All | Создаёт деплой согласно branch pattern |
Параметры запроса
Заголовок раздела «Параметры запроса»| Параметр | Обязательный | Описание |
|---|---|---|
commitSha | Да | SHA коммита для деплоя (40 символов hex) |
branch | Да | Ветка для деплоя |
message | Да | Сообщение деплоя (до 500 символов) |
author | Нет | Автор деплоя (до 200 символов) |
Ответ API
Заголовок раздела «Ответ API»При успешном триггере возвращается:
{ "id": "deployment-uuid", "status": "PENDING", "isPreview": false, "url": "https://myproject-abc123-workspace.onreza.app", "urls": { "unique": "https://myproject-abc123-workspace.onreza.app", "branch": "https://myproject-git-main-workspace.onreza.app", "production": "https://myproject-workspace.onreza.app" }, "message": "Deployment triggered successfully via webhook"}Управление Deploy Hooks
Заголовок раздела «Управление Deploy Hooks»Просмотр статистики
Заголовок раздела «Просмотр статистики»На странице Deploy Hooks видна статистика:
- Triggered Count — сколько раз использовался
- Last Triggered — когда последний раз
Регенерация токена
Заголовок раздела «Регенерация токена»Если токен скомпрометирован:
- Найдите hook в списке
- Нажмите Regenerate
- Скопируйте новый URL
- Обновите URL во всех системах
Удаление
Заголовок раздела «Удаление»- Найдите hook в списке
- Нажмите удалить (корзина)
- Подтвердите
Отличие от Webhooks
Заголовок раздела «Отличие от Webhooks»| Характеристика | Webhooks | Deploy Hooks |
|---|---|---|
| Источник | Git провайдер | Любая система |
| Триггер | git push | HTTP POST или CLI |
| Автоматически | Да | Нужен явный вызов |
| Commit info | Из git | Указывается вручную |
Security
Заголовок раздела «Security»Защита URL
Заголовок раздела «Защита URL»- Храните URL в секретах (GitHub Secrets, GitLab Variables)
- Не логируйте URL
- Регулярно ротируйте токены
Rate Limiting
Заголовок раздела «Rate Limiting»Troubleshooting
Заголовок раздела «Troubleshooting»”Invalid token”
Заголовок раздела «”Invalid token”»- Проверьте что URL скопирован полностью
- Проверьте что hook не был удалён
- Регенерируйте токен если нужно
”X-Workspace header is required”
Заголовок раздела «”X-Workspace header is required”»- Используйте CLI вместо прямых HTTP-запросов
- Или убедитесь что используете API key аутентификацию
Scope не соответствует ветке
Заголовок раздела «Scope не соответствует ветке»Ошибка: Hook is scoped to PRODUCTION, but branch 'feature' is not production branch
- Проверьте scope hook’а
- Используйте scope All если хотите деплоить любую ветку
- Или создайте отдельные hooks для production и preview
Деплой не создаётся
Заголовок раздела «Деплой не создаётся»- Проверьте scope — возможно он не соответствует ветке
- Проверьте что ветка существует в репозитории
- Проверьте логи в ONREZA
”Branch not found”
Заголовок раздела «”Branch not found”»- Убедитесь что ветка существует в репозитории
- Проверьте что Git провайдер подключён
- Проверьте что токен провайдера действителен
Use Cases
Заголовок раздела «Use Cases»Deploy после тестов
Заголовок раздела «Deploy после тестов»# GitHub Actionsjobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: npm test
deploy: needs: test # Только после успешных тестов runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Trigger Deploy Hook run: | curl -X POST "${{ secrets.ONREZA_DEPLOY_HOOK_URL }}" \ -H "Content-Type: application/json" \ -d "{\"commitSha\": \"${{ github.sha }}\", \"branch\": \"main\", \"message\": \"Deploy after tests\"}"Deploy при обновлении CMS
Заголовок раздела «Deploy при обновлении CMS»// Headless CMS webhook handlerexport async function handleContentUpdate(event) { // Триггер деплоя при публикации контента await fetch(process.env.ONREZA_DEPLOY_HOOK_URL, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ commitSha: 'latest', branch: 'main', message: `CMS update: ${event.type}`, }), });}Scheduled rebuild для static sites
Заголовок раздела «Scheduled rebuild для static sites»# Ежедневный rebuild в 3:00 для обновления данных0 3 * * * curl -X POST "https://api.onreza.ru/v1/hooks/YOUR_TOKEN" -H "Content-Type: application/json" -d '{"commitSha":"latest","branch":"main","message":"Scheduled rebuild"}'См. также
Заголовок раздела «См. также»- Webhooks — автодеплой при пуше
- Git интеграция — обзор
- Деплои — управление деплоями
- CLI аутентификация — Device Flow для CLI