Gerrit 事件监听实现

环境

Centos 7.9
Gerrit 2.15

Gerrit 2.15容器搭建

docker-compose.yml

version: '3'
services:gerrit:image: gerritcodereview/gerrit:2.15ports:- 8080:8080- 29418:29418volumes:- ./review_site:/var/gerrit/review_siteenvironment:- CANONICAL_WEB_URL=http://localhost:8080/- JAVA_HOME=/usr/lib/jvm/javapostgres:image: postgres:12environment:- POSTGRES_USER=gerrit- POSTGRES_PASSWORD=gerrit- POSTGRES_DB=gerrit

启动docker

docker-compose up -d

方式一 Gerrit Stream

利用 gerrit stream-events 实现对Gerrit所有事件的监听

生成密钥

ssh-keygen -t rsa -b 4096

配置SSH
在这里插入图片描述
配置All-Projects的Stream Events
在这里插入图片描述
代码部分

import subprocess
import jsondef handle_data(data):# 处理从gerrit stream-events获取的数据event_data = json.loads(data)# 事件数据print('---event_data begin---')print(event_data)print('---event_data end---')# 根据事件类型执行相应的操作event_type = event_data.get('type')if event_type == 'change-merged':# 处理变更合并事件change_id = event_data.get('change').get('id')print(f'Change {change_id} merged')# 执行其他操作...elif event_type == 'comment-added':# 处理评论添加事件change_id = event_data.get('change').get('id')comment = event_data.get('comment')print(f'New comment on Change {change_id}: {comment}')else:# 处理其他事件类型print(f'Unsupported event type: {event_type}')def listen_to_gerrit_events():cmd = ['ssh', '-p', '29418', '-i', 'C:\\Users\\xxx\\.ssh\\id_rsa', 'admin@192.168.186.138', 'gerrit','stream-events']proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)for line in iter(proc.stdout.readline, b''):handle_data(line.decode('utf-8'))if __name__ == "__main__":listen_to_gerrit_events()

在Gerrit操作patch,代码会打印相应的事件

方式二 Gerrit Webhook

以Gerrit 2.15为例

使用webhook插件实现Gerrit主动向自己的web服务发送请求

  1. 下载&打包webhooks插件

下载地址:https://gerrit.googlesource.com/plugins/webhooks
(Gerrit 2.15对应https://gerrit.googlesource.com/plugins/webhooks/+/refs/heads/stable-2.15)

安装 bazel(1.1.0版本)

cd /usr/bin && curl -fLO https://releases.bazel.build/1.1.0/release/bazel-1.1.0-linux-x86_64 && chmod +x bazel-1.1.0-linux-x86_64

下载插件代码

git clone https://gerrit.googlesource.com/plugins/webhooks -b stable-2.15

编译插件(需要访问外网)

bazel build //...

查看编译产物

cd bazel-bin
ls

在这里插入图片描述
将产物拷贝到Gerrit容器的插件目录下

docker cp webhooks.jar gerrit:/var/gerrit/plugins

重启Gerrit容器

docker restart gerrit
  1. 配置All-Projects

下载All-Projects代码

git clone ssh://admin@xxx:29418/All-Projects

切换分支

git fetch origin refs/meta/config:refs/remotes/origin/meta/config
git checkout meta/config

项目根目录下创建&配置webhooks.config

vi webhooks.config
[remote "changemerged"]url = http://192.168.38.1:8081/change-mergedevent = change-merged[remote "project_created"]url = http://192.168.38.1:8081/create-jenkins-projectevent = project-created

其中,192.168.38.1:8081是你的web服务地址

上传修改

git commit -am "Add webhooks config file"
git push origin meta/config:meta/config

本地编写web服务

from flask import Flask, requestapp = Flask(__name__)@app.route('/change-merged', methods=['POST', 'GET'])
def handle_gerrit_webhook():print(request.headers)data = request.get_json()print(data)event_type = data['type']if event_type == 'change-merged':project = data['change']['project']branch = data['change']['branch']commit_id = data['change']['commitMessage'].split('\n')[0]print(f'Code commit {commit_id} has been merged into {project}/{branch}')return 'OK'@app.route('/create-jenkins-project', methods=['POST', 'GET'])
def handle_gerrit_webhook1():print(request.headers)data = request.get_json()print(data)event_type = data['type']if event_type == 'create-jenkins-project':project = data['change']['project']branch = data['change']['branch']commit_id = data['change']['commitMessage'].split('\n')[0]print(f'Code commit {commit_id} has been merged into {project}/{branch}')return 'OK'if __name__ == '__main__':app.run(host='192.168.38.1', port=8081, debug=True)

创建新项目
在这里插入图片描述
将在Gerrit平台上代码合入,web服务正常监听
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/174844.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink Hive Catalog操作案例

在此对Flink读写Hive表操作进行逐步记录,需要指出的是,其中操作Hive分区表和非分区表的DDL有所不同,以下分别记录。 基础环境 Hive-3.1.3 Flink-1.17.1 基本操作与准备 1、上传依赖jar包到flink/lib目录下 cp flink-sql-connector-hive-…

解决计算机msvcp120.dll文件丢失的5种方法,亲测有效

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp120.dll丢失”。这个错误提示可能会给我们带来很大的困扰,影响我们的正常使用。本文将详细介绍msvcp120.dll丢失的原因、解决方法以及预防措施,帮助大家更好地…

新能源汽车电池包自动三维尺寸检测系统蓝光光学平面度测量仪-CASAIM

电池包是新能源汽车核心能量源,为整车提供驱动电能。作为新能源汽车的核心部件,其品质直接决定了整车性能。 由于电池包的生产工艺相对复杂,传统的测量工具不仅测量工序复杂、精度不足,还会或多或少接触到电池表面形成瑕疵&#…

双向链表的初步练习

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇: Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”…

函数栈帧的创建和销毁(以C语言代码为例,汇编代码的角度分析)

函数栈帧的创建和销毁[以C语言代码为例,汇编代码的角度分析] 一.前言1.几个问题2.几个说明 二.相关寄存器和汇编命令的简要说明三.从汇编代码调试的角度逐步分析函数栈帧的创建于销毁1.函数栈区的知识:2.逐步调试分析1.保存__tmainCRTStartup这个函数栈帧的栈底地址2.正式进入m…

合肥中科深谷嵌入式项目实战——人工智能与机械臂(三)

订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 作者:爱吃饼干的小白鼠。Python领域优质创作者,2022年度博客新星top100入围,荣获多家平台专家称号。…

kafka3.X集群安装(不使用zookeeper)

一、kafka集群实例角色规划 在本专栏的之前的一篇文章《kafka3种zk的替代方案》已经为大家介绍过在kafka3.0种已经可以将zookeeper去掉。 上图中黑色代表broker(消息代理服务),褐色/蓝色代表Controller(集群控制器服务) 左图(kafk…

[BUUCTF NewStarCTF 2023 公开赛道] week4 crypto/pwn

再补完这个就基本上完了. crypto RSA Variation II Schmidt-Samoa密码系统看上去很像RSA,其中Npqq, 给的eN给了d from secret import flag from Crypto.Util.number import *p getPrime(1024) q getPrime(1024)N p*p*qd inverse(N, (p-1)*(q-1)//GCD(p-1, q-1))m bytes…

计算机视觉的相机选型

#你一般什么时候会用到GPT?# 目前市面上的工业相机大多是基于CCD(ChargeCoupled Device)或CMOS(Complementary Metal Oxide Semiconductor)芯片的相机。一般CCD制造工艺更加复杂,也会更贵一点! 1、CCD工…

40基于MATLAB,使用模板匹配法实现车牌的识别。

基于MATLAB,使用模板匹配法实现车牌的识别。具体包括将原图灰度化,边缘检测,腐蚀操作,车牌区域定位,车牌区域矫正,二值化,均值滤波,切割,字符匹配,最终显示车…

mycat2.X读写分离

一、数据库中间件介绍 二、下载安装包 2.1下载地址: 下载两个一个是mycat程序,一个是mycat的驱动 http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.20.zip http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies-2…

git本地搭建服务器[Vmware虚拟机访问window的git服务器]

先按照https://zhuanlan.zhihu.com/p/494988089说明下载好Gitblit然后复制到tomcat的webapps目录下,如下: 双击"startup.bat"启动tomcat: 然后访问"http://127.0.0.1:8080/gitblit/"即可看到git的界面: 说明git服务器已经能够成功运行了! Vmware虚拟机…

vue源码分析(七)—— createComponent

文章目录 前言一、createComponent 参数说明二、createComponent 源码详解1.baseCtor的实际指向2.extend 方法3.判断Ctor是否是函数的判断4.installComponentHooks方法5.返回一个带标识的组件 vnode 前言 createComponent文件的路径: src\core\vdom\create-componen…

windows下使用FFmpeg开源库进行视频编解码完整步聚

最终解码效果: 1.UI设计 2.在控件属性窗口中输入默认值 3.复制已编译FFmpeg库到工程同级目录下 4.在工程引用FFmpeg库及头文件 5.链接指定FFmpeg库 6.使用FFmpeg库 引用头文件 extern "C" { #include "libswscale/swscale.h" #include "libavdevic…

Failed to prepare the device for development

👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的编码爱好者 大家好,我是 DevO…

IDEA 使用技巧

文章目录 语言支持简化编写 有问题,可暂时跳过 个人常用快捷键插件主题插件功能插件 碰到过的问题 除了一些在Linux上用vim开发的大佬,idea算是很友好的集成开发工具了,功能全面,使用也很广泛。 记录一下我的 IDEA 使用技巧&#…

【数据分析】上市公司半年报数据分析

前言 前文介绍过使用网络技术获取上市公司半年报数据的方法,本文将对获取到的数据进行简要的数据分析。 获取数据的代码介绍在下面的两篇文章中 【java爬虫】使用selenium获取某交易所公司半年报数据-CSDN博客 【java爬虫】公司半年报数据展示-CSDN博客 全量数…

Java工具库——commons-lang3的50个常用方法

未来的你,我亲爱的女孩,愿此刻无忧无虑,开心,快乐… 工具库介绍 Apache Commons Lang 3(通常简称为Commons Lang 3)是Apache Commons项目中的一个Java工具库,它提供了一系列实用的工具类和方法…

骨传导耳机到底好用吗,2023年骨传导耳机该怎么选

骨传导耳机到底好用吗,骨传导耳机是一种完全颠覆你听音体验的黑科技!不仅能够让你享受音乐的同时保护你的听力,还能让你感受到一种前所未有的新鲜感。很显然,骨传导耳机是真的好用,现在市面上有许多品牌的骨传导耳机&a…

24 行为型模式-访问者模式

1 访问者模式介绍 访问者模式在实际开发中使用的非常少,因为它比较难以实现并且应用该模式肯能会导致代码的可读性变差,可维护性变差,在没有特别必要的情况下,不建议使用访问者模式。 2 访问者模式原理 3 访问者模式实现 我们以超市购物为例,假设超市中的三类商品: 水果,糖…