在发生任何BitBucket事件(例如Pushed
,Forked
,PR creating
,Addition
的情况下,我试图将数据(有效载荷)从BitBucket发布到我的Kafka实例/ Modification
/ Deletion
的PR评论等)
因此,我已经设置了Kafka rest-proxy,但是我无法将数据从BitBucket发送到Kafka,因为使用Kafka REST proxy发布数据所需的Content-Type
是application/vnd.kafka.json.v2+json
,而BitBucket的有效负载的标头设置为application/json
(我正在使用在Repository
级别配置的默认BitBucket Webhook)。
这是从BitBucket的Webhook触发的请求:
我从Kafka的REST Proxy得到的响应是:
我已经考虑过以下解决方案:
我可以编写一个简单的Web服务器,充当两个系统(BitBucket和Kafka)之间的中介程序。服务器可以充当中间代理,并使用适当的标头(Kafka REST proxy
)从BitBucket的webhook捕获传入的请求并将其发布到application/vnd.kafka.json.v2+json
。
此解决方案有效,但缺点是维护另一台服务器(由我编写)。而且,随着BitBucket开始频繁触发网络钩子(高峰时段每秒100秒钟,因为我们只有一个BitBucket实例并且我们有大约3500个开发人员),它可能会出现可伸缩性问题。
我可以使用 BitBucket插件,该插件可以作为webhook
使用,它允许我动态配置和更改标头。 这是我正在努力实现的解决方案。也不需要维护额外的服务器。
是否有一个BitBucket插件,可以从市场上安装它,使我可以在网络挂接时配置标头 被触发?
P.S。 -很抱歉写这么长的问题。这两种解决方案都是从头开始。如果有更好的解决方案将BitBucket与Kafka集成,我不会感到惊讶。另外,如果问题不清楚,请告诉我。在这种情况下,我将尝试以其他方式澄清我的问题。
谢谢
答案 0 :(得分:0)
您可以使用Pipedream接受来自Bitbucket的Webhook请求,将Content-Type
标头修改为application/vnd.kafka.json.v2+json
,然后将请求转发到您的Kafka REST代理。在Pipedream上运行这样的管道是免费的。
我创建了一个example pipeline,向您展示了它是如何工作的。它接收从Bitbucket($event.body
)发送的HTTP有效负载,并使用一点Node.js代码将请求转发到另一个HTTP端点。
就我而言,我刚刚添加了一个RequestBin URL,以便您可以看到正文和标头张贴在某个地方—看看我发送的here请求示例。展开该请求的“标头”部分,注意Content-Type
标头已正确设置为application/vnd.kafka.json.v2+json
。
如果您在上方分叉管道(只需单击右上角的Fork按钮),它将生成特定于您的管道的自定义URL。将该URL添加为与您的回购绑定的新Bitbucket Webhook URL,您应该开始看到新事件通过。
这假定您的Kafka REST代理URL可公开访问。 Pipedream管道的所有代码都是公开的,因此,如果要将Kafka REST Proxy端点保持私有,则可以创建一个environment variable并在Node.js代码中引用该代码,将RequestBin URL替换为该值环境变量。
例如,我可以创建一个名为KAFKA_REST_ENDPOINT
的环境变量并替换:
url: 'https://entygbild98b.x.pipedream.net'
使用
url: process.env.KAFKA_REST_ENDPOINT
让我知道这是否有帮助,或者您还有其他问题。