首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ZUUL-MERGER启动流程

在ZUUL服务的核心进程中,MERGER也是一个比较重要的部分。通过gerrit触发的commit事件,由该进程预先在ZUUL本地的workspace做代码合并操作,后续的测试job也是基于ZUUL本地的workspace进行的。下面将从ZUUL源代码的角度,剖析MERGER进程的启动流程。

merge_root =self.config.get('merger','git_dir')

默认 '/var/lib/zuul/git'

merge_email =self.config.get('merger','git_user_email')

merge_name =self.config.get('merger','git_user_name')

3.2. 初始化Merger类,用于封装对git的命令行操作

self._makeSSHWrappers(working_root, connections)

ZUUL MERGER对git命令的封装是使用Python开源库GitPython的方式。

GitPython需要设置环境变量'GIT_SSH'对应一个到gerrit server的SSH Wrapper

cmd_line ='ssh -i %s $@\n'% key (该key在zuul.conf文件中配置)

更多详细介绍:https://gitpython.readthedocs.io/en/stable/

3.3. 注册gearman worker

绑定gear Server信息 ,创建到gear server的连接对象,添加到未激活连接列表中。

启动PollLoop线程,处理数据包

启动ConnectLoop线程,激活列表中还未激活的连接

3.4. 启动线程轮询gearman server已注册的task

self.thread = threading.Thread(target=self.run)

job =self.worker.getJob()

ifjob.name =='merger:merge':self.merge(job)

elifjob.name =='merger:update':self.update(job)

else:job.sendWorkFail()

流程图如下:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180302G01J5B00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券