我一直试图弄清楚我的Jenkins ZMQ事件发布者配置出了什么问题已经超过23个小时而已经放弃了 . 希望你可能知道我做错了什么 .
-
我已经使用ZMQ-event-publisher插件安装了Jenkins,并且在
Manage Jenkins
- >Configure System
已选中Enable on all Jobs
( NoteTCP 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 回答
来自ZMQ Guide:
我怀疑您的订阅者脚本没有看到事件,因为您需要设置订阅过滤器 . 如zmq_setsockopt page所述,将过滤器设置为空字符串可订阅所有消息 .
尝试添加: