我一直试图弄清楚我的Jenkins ZMQ事件发布者配置出了什么问题超过23个小时而已经放弃了。希望你可能知道我做错了什么。
Manage Jenkins
- > Configure System
下检查了Enable on all Jobs
(注意 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插件没有很好的解释,看看插件代码并没有透露太多。
我们非常感谢您的帮助。
感谢。
编辑:戴夫的建议很棒,但尚未解决问题。
编辑2 :看起来它失败了,因为Jenkins一直在从Docker容器运行,我忘了暴露它的所有端口。然而,看起来戴夫的建议确实解决了这个问题。耶!!!
答案 0 :(得分:2)
来自ZMQ Guide:
请注意,使用SUB套接字时,必须使用zmq_setsockopt()和SUBSCRIBE设置订阅
我怀疑您的订阅者脚本没有看到事件,因为您需要设置订阅过滤器。如zmq_setsockopt page所述,将过滤器设置为空字符串可以订阅所有消息。
尝试添加:
socket.setsockopt(zmq.SUBSCRIBE, '')