如何配置JGroups避免Jenkins并行测试构建形成集群?
解决Jenkins并行构建中JGroups跨集群问题
核心思路
既然没法移除<transport>标签,那就让每个测试实例的JGroups彻底孤立——不管集群名是不是一样,都让它们找不到任何其他节点,各自成一个单节点集群。
infinispan.xml 微调(可选但更稳妥)
原配置已经能引用测试用的JGroups栈,建议给<transport>明确指定使用我们的测试栈,避免默认栈捣乱:
<transport cluster="mycluster" stack="jgroups"/>
关键:重写jgroups-test.xml 配置
直接用下面的配置,彻底砍掉所有节点发现、跨进程通信的可能:
<config xmlns="urn:org:jgroups" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/jgroups-4.2.xsd"> <!-- 绑定回环地址+随机端口,限制仅本地通信 --> <TCP bind_addr="127.0.0.1" bind_port="0" enable_diagnostics="false" client_bind_port="0" receive_on_all_interfaces="false" loopback="true"/> <!-- 强制单节点,彻底禁用所有发现机制 --> <LOCAL/> <!-- 保留必要的协议,但全部禁用多播/跨进程通信 --> <FD_ALL timeout="3000" interval="1000"/> <VERIFY_SUSPECT timeout="1500"/> <BARRIER/> <pbcast.NAKACK2 use_mcast_xmit="false" discard_delivered_msgs="true"/> <UNICAST3/> <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000" max_bytes="4M"/> <pbcast.GMS print_local_addr="false" join_timeout="500" view_bundling="true"/> <UFC max_credits="2M" min_threshold="0.4"/> <MFC max_credits="2M" min_threshold="0.4"/> <FRAG2 frag_size="60K"/> </config>
重点配置说明
<TCP bind_addr="127.0.0.1">:把通信限制在本地回环,杜绝跨进程的网络交互<LOCAL/>:JGroups的LOCAL协议会强制集群只有当前节点,完全跳过任何节点发现流程- 删除原配置里的UDP:UDP的广播特性是跨集群的元凶,必须删掉
use_mcast_xmit="false":禁用所有多播传输,确保不会发送能被其他进程接收的消息
额外保险(可选)
如果担心还有漏网之鱼,启动测试时给每个Jenkins构建实例加个唯一的集群名:
-Dinfinispan.cluster.name=mycluster-${BUILD_NUMBER}
这样就算JGroups还有发现能力,集群名不一样也不会合并。
验证方式
启动两个测试进程,看JGroups日志里的view信息,如果显示类似view=[test-node-123|0](只有自己的节点ID),说明配置生效了,不会形成跨构建的集群。
内容的提问来源于stack exchange,提问作者Brandon Flowers
相关产品推荐
相关产品推荐

