各组件之间的协作流程。

1、准备工作
(1)Zuul
配置Zuul对接的Gerrit服务器。
定义pipeline以及每个项目在对应pipeline下运行哪些任务。
(2)JJB定义项目任务,解析任务并上传到Jenkins服务器。
(3)Nodepool
一个可用的OpenStack云环境。
编译镜像,上传到云环境。
连接到云环境,用上传的镜像孵化Slave节点资源池。

2、工作流
(1)贡献者在Gerrit上提交新Patch、添加评论等。
(2)Gerrit提交一个通知事件到它的事件流中(Event Stream)
(3)Zuul从Gerrit的事件流中读取事件,并准备好本地项目代码,然后匹配事件到一个或多个pipeline,并找到该Patch对应的项目下的pipeline任务,把任务提交给Gearman服务器。
(4)Gearman把Job分发到可以执行该任务的W orker上。
(5)Worker根据Slave节点信息在对应节点上构建任务。
(6)构建后操作:把当前任务执行的日志信息和中间结果(包括编译结果)拷贝到日志服务器上。
(7)返回任务结果到Jenkins的事件流中:

Jenkins通过消息方式通知Nodepool此次任务完成。
Nodepool删除执行该Job的Slave节点,并重新孵化新的节点。
Jenkins通过Gearman把当前的任务执行结果返回给Zuul。

(8)根据测试结果,Zuul在Gerrit中对Patch添加一个Review结果。
(9)贡献者在Gerrit上可以查看。