• Русский
  • Входящие вебхуки

    Входящие вебхуки позволяют запускать pipeline напрямую через HTTP POST-запросы, без необходимости Git-событий.

    Обзор

    Входящие вебхуки предоставляют способ:

    • Запускать pipeline из внешних систем
    • Интегрироваться с инструментами CI/CD, которые не используют Git
    • Запускать pipeline вручную или через вызовы API
    • Поддерживать пользовательские полезные нагрузки и параметры
    Как работают входящие вебхуки
    1. HTTP POST-запрос: Отправьте POST-запрос на endpoint /incoming контроллера PAC
    2. Аутентификация: PAC проверяет запрос с использованием secret (из заголовка или параметра запроса)
    3. Поиск Repository: PAC находит Repository CR на основе имени репозитория и namespace
    4. Запуск pipeline: PAC обрабатывает полезную нагрузку и запускает подходящие pipeline, аналогично Git webhook-событиям
    5. Создание PipelineRun: PAC создает PipelineRun на основе полезной нагрузки и определений pipeline

    Ключевые отличия от Git webhooks:

    • Не участвует Git provider — прямые HTTP-запросы
    • Пользовательский формат полезной нагрузки — вы управляете структурой
    • Можно запускать pipeline без фактических Git-коммитов
    • Полезно для внешних интеграций и ручных запусков

    Настройка входящего webhook

    1. Включите в Repository CR: Добавьте конфигурацию входящего webhook в ваш Repository CR:

      apiVersion: pipelinesascode.tekton.dev/v1alpha1
      kind: Repository
      metadata:
        name: my-repo
        namespace: project-pipelines
      spec:
        url: "https://gitlab.com/user/repo"
        git_provider:
          type: gitlab
          url: "https://gitlab.com"
          secret:
            name: gitlab-secret
            key: token
          webhook_secret:
            name: webhook-secret
            key: secret
        # Incoming webhook configuration
        incoming:
        - type: webhook-url
          secret:
            name: incoming-webhook-secret
            key: secret
    2. Создайте secret входящего webhook:

      kubectl create secret generic incoming-webhook-secret \
        --from-literal=secret=your-incoming-webhook-secret \
        -n project-pipelines
    3. Получите URL входящего webhook:

    Endpoint входящего webhook:

    http://<pac-controller-url>/incoming

    Параметры URL (необязательно, также могут передаваться через заголовки):

    • repository: имя Repository CR
    • namespace: namespace, в котором находится Repository CR
    • secret: значение secret входящего webhook

    Пример с параметрами запроса:

    http://pac.example.com/incoming?repository=my-repo&namespace=project-pipelines&secret=your-secret

    Пример с заголовками (рекомендуется для повышения безопасности):

    http://pac.example.com/incoming

    С заголовками: X-Repository, X-Namespace, X-Secret

    Рекомендуемая практика безопасности

    Используйте заголовки (X-Repository, X-Namespace, X-Secret) вместо параметров запроса, чтобы не раскрывать secrets в URL и логах.

    Запуск pipeline через входящий webhook

    Отправьте POST-запрос на endpoint входящего webhook:

    curl -X POST \
      http://pac.example.com/incoming \
      -H "Content-Type: application/json" \
      -H "X-Repository: my-repo" \
      -H "X-Namespace: project-pipelines" \
      -H "X-Secret: your-incoming-webhook-secret" \
      -d '{
    "ref": "refs/heads/main",
    "sha": "abc123def456...",
    "repository": {
      "url": "https://gitlab.com/user/repo"
    }
      }'

    Полезная нагрузка входящего webhook

    Входящий webhook принимает JSON-полезную нагрузку со следующей структурой:

    {
      "ref": "refs/heads/main",
      "sha": "commit-sha",
      "repository": {
        "url": "https://gitlab.com/user/repo",
        "name": "repo-name",
        "full_name": "user/repo"
      },
      "sender": {
        "login": "username"
      },
      "head_commit": {
        "message": "Commit message",
        "author": {
          "name": "Author Name",
          "email": "author@example.com"
        }
      }
    }

    Пользовательские параметры

    Вы можете передавать пользовательские параметры в полезной нагрузке webhook:

    {
      "ref": "refs/heads/main",
      "sha": "abc123...",
      "repository": {
        "url": "https://gitlab.com/user/repo"
      },
      "params": {
        "environment": "production",
        "deploy": "true"
      }
    }

    Эти параметры доступны в вашем pipeline как $(params.environment) и $(params.deploy).

    Вопросы безопасности

    1. Используйте secrets: Всегда используйте secrets webhook для проверки запросов
    2. HTTPS: Используйте HTTPS для endpoint webhook в production
    3. Сетевые политики: Ограничьте доступ к endpoint входящего webhook
    4. Ограничение частоты: Реализуйте ограничение частоты запросов, чтобы предотвратить злоупотребление
    5. Проверяйте полезные нагрузки: Проверяйте входящие полезные нагрузки перед обработкой

    Устранение неполадок во входящих webhook

    1. Проверьте URL webhook: Убедитесь, что URL корректен и доступен

    2. Проверьте secret: Убедитесь, что secret совпадает как в запросе, так и в Repository CR

    3. Проверьте логи PAC:

      kubectl logs -n <pac-namespace> -l app=pipelines-as-code-controller --tail=100 | grep incoming  # Replace <pac-namespace> with your actual namespace (default: tekton-pipelines)
    4. Проверьте Repository CR: Убедитесь, что входящий webhook настроен правильно

    5. Проверьте с помощью curl: Используйте curl для проверки endpoint webhook

    Рекомендации

    1. Управление PipelineRun

    • Задавайте ограничения на очистку: Используйте max-keep-runs, чтобы предотвратить накопление
    • Следите за ресурсами: Отслеживайте использование ресурсов PipelineRun
    • Архивируйте важные запуски: Экспортируйте важные PipelineRun перед очисткой

    2. Мониторинг

    • Используйте labels: Помечайте PipelineRun labels для более удобной фильтрации
    • Настройте alerts: Настройте alerts для неудачных PipelineRun
    • Регулярно проверяйте: Периодически проверяйте статус и логи PipelineRun

    3. Входящие вебхуки

    • Защищайте endpoint: Всегда используйте HTTPS и secrets
    • Проверяйте полезные нагрузки: Проверяйте полезные нагрузки входящего webhook
    • Документируйте использование: Документируйте endpoint webhook и форматы полезной нагрузки
    • Тщательно тестируйте: Проверяйте триггеры webhook перед использованием в production

    Устранение неполадок

    PipelineRun не создан

    1. Проверьте webhook: Убедитесь, что webhook настроен и получает события
    2. Проверьте Repository CR: Убедитесь, что Repository CR настроен правильно
    3. Проверьте логи PAC: Просмотрите логи контроллера PAC на наличие ошибок
    4. Проверьте файл pipeline: Убедитесь, что файл определения pipeline существует в репозитории

    PipelineRun не выполняется

    1. Проверьте статус: Просмотрите статус и условия PipelineRun
    2. Проверьте логи: Проверьте логи PipelineRun и TaskRun
    3. Проверьте ресурсы: Убедитесь, что ресурсов кластера достаточно
    4. Проверьте права доступа: Убедитесь, что ServiceAccount имеет необходимые права

    Статус не сообщается

    1. Проверьте token Git provider: Убедитесь, что token имеет необходимые scopes
    2. Проверьте PAC Watcher: Убедитесь, что PAC Watcher запущен
    3. Проверьте логи: Проверьте логи PAC Watcher на наличие ошибок
    4. Проверьте подключение: Убедитесь, что PAC может обращаться к API Git provider

    Следующие шаги

    • Trigger Pipelines - Узнайте о разных способах запуска
    • Define PipelineRuns in Git - Файлы PipelineRun и аннотации триггера
    • Guides - Пошаговые инструкции по настройке repository
    • Common Issues - Руководство по устранению неполадок