Как настроить почтовый веб-крючок из BitBucket в Kafka REST Proxy? - PullRequest
1 голос
/ 26 мая 2019

Я пытаюсь отправить данные (полезную нагрузку) из BitBucket в мой экземпляр Kafka в случае каких-либо событий BitBucket (например, Pushed, Forked, PR creating, Addition / Modification / Deletion PR комментариев и т. д.)

Итак, я настроил rest-прокси Kafka, но я не могу отправить данные из BitBucket в Kafka, поскольку Content-Type требуется для публикации данных с использованием Kafka REST proxy равен application/vnd.kafka.json.v2+json, а полезная нагрузка BitBucket имеет заголовок, установленный как application/json (я использую стандартный веб-крючок BitBucket, настроенный на уровне Repository).

Я настроил Webhook на уровне хранилища следующим образом: enter image description here

Это запрос, который запускается из WebHook BitBucket:

enter image description here

И ответ, который я получаю от REST Proxy Кафки, таков:

enter image description here

Я думал о следующих решениях:

  1. Я могу написать простой веб-сервер, который выступает посредником между двумя системами (BitBucket и Kafka) . Сервер может выступать в качестве промежуточного прокси-сервера и получать входящие запросы от веб-крючка BitBucket и публиковать его в Kafka REST proxy, используя соответствующий заголовок (application/vnd.kafka.json.v2+json).

    Это решение работает, но минусами являются обслуживание другого сервера (написано мной). Кроме того, он может иметь проблем с масштабируемостью , так как BitBucket начинает часто запускать веб-крючки (100 с в секунду в часы пик, поскольку у нас всего один экземпляр BitBucket и около 3500 разработчиков).

  2. Я могу использовать плагин BitBucket , который работает как webhook и который позволяет мне настраивать и изменять заголовки на лету. Это решение, которого я стремлюсь достичь . Не требует обслуживания дополнительного сервера.

Есть ли плагин BitBucket, который я могу установить из магазина, который позволит мне настраивать заголовок при подключении к Интернету? срабатывает ?

P.S. - Извиняюсь за написание такого длинного вопроса. Эти два решения просто с моей головы. Я не удивлюсь, если будет доступно лучшее решение для интеграции BitBucket с Kafka. Также, пожалуйста, дайте мне знать, если вопрос остается неясным. В этом случае я попытаюсь прояснить свой вопрос по-другому.

Спасибо

1 Ответ

0 голосов
/ 15 июня 2019

Вы можете использовать Pipedream для приема запросов веб-крюка от Bitbucket, изменить заголовок Content-Type на application/vnd.kafka.json.v2+json и переслать запрос на ваш REST-прокси Kafka.Запуск таких конвейеров в Pipedream бесплатный.

Я создал пример конвейера , который показывает вам, как это работает.Он принимает полезную нагрузку HTTP, отправленную из Bitbucket - $event.body - и использует немного кода Node.js для пересылки запроса на другую конечную точку HTTP.

В моем случае я просто добавил URL-адрес RequestBin, чтобы вы моглипосмотрите, где тело и заголовки размещены где-то - посмотрите пример запроса, который я отправил здесь .Разверните раздел Заголовки этого запроса и обратите внимание, что заголовок Content-Type правильно установлен на application/vnd.kafka.json.v2+json.

Если вы разветвляете конвейер выше (просто нажмите кнопку Fork в правом верхнем углу), он должен сгенерироватьпользовательский URL, специфичный для вашего конвейера.Добавьте этот URL-адрес в качестве нового URL-адреса Bitbucket webhook, привязанного к вашему репозиторию, и вы должны начать видеть новые события.

Предполагается, что ваш URL-адрес прокси-сервера KEST KEFKA общедоступен.Весь код для конвейеров Pipedream является общедоступным, поэтому, если вы хотите сохранить конфиденциальность конечной точки прокси-сервера KEST REF Proxy, вы можете создать переменную окружения и сослаться на нее в коде Node.js, заменив URL-адрес RequestBin назначение этой переменной среды.

Например, я мог бы создать переменную среды с именем KAFKA_REST_ENDPOINT и заменить:

url: 'https://entygbild98b.x.pipedream.net'

на

url: process.env.KAFKA_REST_ENDPOINT

Дайте мне знать, если это поможет или если выесть другие вопросы.

...