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

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

    Обзор

    Входящие webhook предоставляют возможность:

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

    Основные отличия от Git webhook:

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

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

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

      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
        # Конфигурация входящего webhook
        incoming:
        - type: webhook-url
          secret:
            name: incoming-webhook-secret
            key: secret
    2. Создайте секрет для входящего webhook:

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

    Эндпоинт входящего webhook:

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

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

    • repository: имя CR Repository
    • namespace: namespace, где расположен CR Repository
    • 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) вместо параметров запроса, чтобы избежать раскрытия секретов в URL и логах.

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

    Отправьте POST-запрос на эндпоинт входящего 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. Используйте секреты: всегда используйте секреты webhook для проверки запросов
    2. HTTPS: используйте HTTPS для эндпоинтов webhook в продакшене
    3. Сетевые политики: ограничьте доступ к эндпоинтам входящего webhook
    4. Ограничение частоты: реализуйте rate limiting для предотвращения злоупотреблений
    5. Проверка полезной нагрузки: валидируйте входящие полезные нагрузки перед обработкой

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

    1. Проверьте URL webhook: убедитесь, что URL правильный и доступен

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

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

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

    5. Тестируйте с curl: используйте curl для проверки эндпоинта webhook

    Рекомендации по лучшим практикам

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

    • Устанавливайте лимиты очистки: используйте max-keep-runs, чтобы избежать накопления
    • Мониторьте ресурсы: следите за использованием ресурсов PipelineRun
    • Архивируйте важные запуски: экспортируйте важные PipelineRun перед очисткой

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

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

    3. Входящие Webhook

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

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

    PipelineRun не создается

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

    PipelineRun не запускается

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

    Статус не отправляется

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

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