GSoC 2018。必威国际有限公司通过消息总线/队列进行远程处理

目标:

地位:完成

团队

细节

我的名字是Pham Vu Tuan,我是一名来自新加坡的大四本科生。这是我第一次参加谷歌代码夏令营,并为一个开源组织做出贡献。

我有GSoC导师在这个项目中帮助我奥列格·内纳舍夫苏本万尼亚拉奇.除此之外,我在remote项目中也得到了开发人员的大力支持Devin Nusbaum杰夫·汤普森

项目概述

当前版本的Jenkins Remotin必威国际有限公司g基于TCP协议。如果失败,代理连接和构建也会失败。流量优先级和多代理通信也存在问题,这会影响Jenkins的稳定性和可伸缩性。

该项目旨在开发一个插件,以添加对流行的消息队列/总线技术(Kafka)的支持,作为Jenkins中的容错通信层。必威国际有限公司

插件源代码可以在中找到github

社会福利

该插件为社区提供了有用的特性:

  • 除了现有的方法(如JNLP或SSH构建代理插件

  • 帮助解决Jenkins中主、代理之间TCP协议通信存在的问题。必威国际有限公司

  • 帮助解决Jenkins中的流量优先级和多agent通信问题。必威国际有限公司

为什么是卡夫卡?

  • Kafka本身不像ActiveMQ或RabbitMQ那样是一个队列,它是一个分布式、复制的提交日志。这有助于消除传统队列系统中的消息传递复杂性。

  • 我们需要支持数据流作为需求,而Kafka在这方面很擅长,这是RabbitMQ所缺乏的。

  • Kafka据说有更好的可扩展性和来自开发社区的良好支持。

架构概述

该项目由多个组成部分组成:

  • Kafka客户端库-新的命令传输实现,生产者和消费者客户端逻辑。

  • 远程处理Kafka插件-使用KafkaGlobalConfiguration、KafkaComputerLauncher和KafkaSecretManager实现插件。

  • Remoting Kafka Agent -一个自定义的JAR代理,带有Remoting JAR包和自定义的Engine实现,用于与Kafka建立通信通道。代理也被包装成Docker图像在DockerHub。

  • 所有组件都与Docker Compose打包在一起。

下图是当前体系结构的概述:remoting卡夫卡架构

通过这种设计,master不再使用直接TCP通信与agent通信,所有通信命令都通过Kafka传输。

第一阶段总结

  • 安装项目作为一组Docker Compose组件:Kafka集群,Jenkins控制器(带有插件)和自定义代理。必威国际有限公司

  • 创建一个带有命令传输实现的PoC,以支持Kafka,其中包括命令调用、RMI、类加载和数据流。

  • 对远程处理和核心进行必要的更改,使其具有可扩展性(如果需要)。

  • 决定卡夫卡是否适合作为最终实施。

第二阶段总结

第3阶段总结

特征

有一些插件功能的快照。

1.卡夫卡全局配置,支持凭证插件存储机密。

远程处理卡夫卡配置

2.卡夫卡发射器的发射代理。

发射代理卡夫卡

3.使用代理JAR从CLI启动代理,并提供secret以确保安全性。

代理cli

4.使用Kafka代理运行作业、管道。

演示工作

5.主人和代理人之间的卡夫卡沟通。

卡夫卡命令

远程处理操作正在Kafka上执行。在日志中,您可以看到:

  • 命令执行(slaveinstallerfactorympl.isWindows())

  • 类加载(Classloader.fetch ())

  • 日志流(Pipe.chunk())

如何运行项目的演示

我们已经为这个插件设置了一个准备就绪的演示。你可以按照下面的步骤运行插件的演示指令.演示中的功能:

  • Docker Compose启动预配置的主实例和代理实例,它们使用Kafka启动器自动连接。

  • Kafka使用SSL加密。

  • 实例中几乎没有演示作业,因此用户可以在代理上启动作业。

  • localhost:9000中支持Kakfa Manager,以支持对Kafka群集的监视。

今后的工作

第3阶段演示幻灯片

第三阶段演示视频

链接