首页 文章

Jenkins的ZMQ事件发布者不发送通知

提问于
浏览
1

我一直试图弄清楚我的Jenkins ZMQ事件发布者配置出了什么问题已经超过23个小时而已经放弃了 . 希望你可能知道我做错了什么 .

  • 我已经使用ZMQ-event-publisher插件安装了Jenkins,并且在 Manage Jenkins - > Configure System 已选中 Enable on all JobsNote TCP port to publish on 设置为 8888 ) .

  • 创建了一个新作业,选中 Check if ZMQ events should be published for this project 并单击 Save .

  • 我用pyZMQ写了一个Python脚本

#!/usr/bin/env python
import zmq
port = "8888"
context = zmq.Context()
socket = context.socket(zmq.SUB)

socket.connect("tcp://localhost:%s" % port)
socket.setsockopt(zmq.SUBSCRIBE, '')
print "Jenkins... waiting..."
string = socket.recv()
print "recv =>", string
  • 在运行Jenkins作业的Jenkins机器上执行上述脚本 .

不幸的是,该脚本没有收到Jenkins的任何ZMQ消息 . 尝试使用 tcpdump -i eth0 'port 8888'tcpdump -i lo 'port 8888' 捕获ZMQ消息也没有帮助 .

除此之外,看看 /var/log/jenkins/jenkins.log ,我得到:

Sep 25, 2014 8:54:47 PM org.jenkinsci.plugins.ZMQEventPublisher.ZMQRunnable bindSocket
INFO: Binding ZMQ PUB to port 8888
Sep 25, 2014 8:54:48 PM hudson.model.Run execute
INFO: MyJob #18 main build action completed: SUCCESS

而且, netstat -ntlp 验证了这一点

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 :::8888                     :::*                        LISTEN      31/java             
tcp        0      0 :::57467                    :::*                        LISTEN      31/java             
tcp        0      0 :::8009                     :::*                        LISTEN      31/java             
tcp        0      0 :::59373                    :::*                        LISTEN      31/java             
tcp        0      0 :::8080                     :::*                        LISTEN      31/java

那么,我做错了什么?关于如何正确配置Jenkins ZMQ插件没有很好的解释,看看插件代码并没有透露太多 .

您的帮助将不仅仅是值得赞赏的 .

谢谢 .

EDIT :Dave 's suggestion was great, but it hasn' t解决了这个问题 .

EDIT 2 :看起来它失败了,因为Jenkins一直在从Docker容器运行,而且've forgotten to expose all its ports. Nevertheless, It looks like Dave'的建议确实解决了这个问题 . 好极了!!!

1 回答

  • 2

    来自ZMQ Guide

    请注意,使用SUB套接字时,必须使用zmq_setsockopt()和SUBSCRIBE设置订阅

    我怀疑您的订阅者脚本没有看到事件,因为您需要设置订阅过滤器 . 如zmq_setsockopt page所述,将过滤器设置为空字符串可订阅所有消息 .

    尝试添加:

    socket.setsockopt(zmq.SUBSCRIBE, '')
    

相关问题