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.mzph.cn/news/124450.shtml

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

相关文章

增强常见问题解答搜索引擎:在 Elasticsearch 中利用 KNN 的力量

在快速准确的信息检索至关重要的时代,开发强大的搜索引擎至关重要。 随着大型语言模型和信息检索架构(如 RAG)的出现,在现代软件系统中利用文本表示(向量/嵌入)和向量数据库已变得越来越流行。 在本文中&am…

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

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

Android---如何同view进行渲染

ViewRootImpl 在 Activity、window 和 View 三者关系之间起着承上启下的作用。一方面,ViewRootImpl 中通过 Binder 通信机制,远程调用 WindowSession 将 View 添加到 Window 中;另一方面,ViewRootImpl 在添加 View 之前&#xff0…

树莓派 Qt中 QCameraInfo 无法使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、QCameraInfo 是什么?二、使用步骤1.测试代码2.解决方案2.1输入命令2.2输出 3. 成功打印了摄像头的信息 总结 前言 提示:这里可以添…

Spring的条件注解,一篇文章盘得清清楚楚明明白白

前言 在Spring中,条件注解可根据特定的条件来决定是否创建或配置Bean,这些条件可以基于类、属性、环境等因素。通过使用条件注解,我们可以在Spring容器中更加灵活地管理和控制组件的创建和注入,帮助我们更加灵活地管理和控制Bean…

51单片机-点阵屏led

代码配置 这样就能选择每一列哪个亮了 进行位选,段清零,这样就不会影响多列同时了 实现动画 1、使用文字摸提取文件,提取图案的16进制表示数组 offest作为偏移量,count作为计时。count10,偏移量加1,就相当于得到下一…

毕业设计基于SpringMVC+Mybatis+Bootstrap的电影院管理系统源码+数据库

<<电影院管理系统>> 电影院管理系统&#xff1a;SpringMVCJSPTomcatMybatisBootstrapJqueryAnimateCSSLayerJS 项目部署&#xff1a;该项目是IDEA版本&#xff0c;Maven项目 前端依赖&#xff1a; Bootstrap-3.4.1Animate.css- 4.1.1Jquery-3.6.0Layer-v3.5.1B…

自学爬虫—作业1—requests模块

视频&#xff1a; 要求&#xff1a; 肯德基地址查询&#xff0c;爬某个关键字&#xff0c;获取下面的所有page的信息&#xff0c;存到一个json或者txt。 代码&#xff1a; 关键点&#xff0c;&#xff08;1&#xff09;每一个ajax的请求第一个键值对就是所有获得的地址的总数…

oracle rac-归档满处理

有客户反馈数据库无法使用了&#xff0c;客户手动启动报错如下 SQL> startup; ORACLE instance started. Total System Global Area 2.6924E10 bytes Fixed Size 2265984 bytes Variable Size 1.3959E10 bytes Database Buffers 1.2952E10 bytes R…

Python语言: 切片的使用

切片的本质&#xff1a;通过切片来截取指定的元素&#xff0c;形成一个新的容器。 切片的具体阐释&#xff1a; 此切片非切片面包的切片&#xff0c;而是python语言中的切片。切片&#xff1a;顾名思义&#xff0c;就是把整块的东西分割开来。python语言中的切片是把一个容器截…

内存学习(1):内存分类与常用概念1(RAM)

随机存取存储器&#xff08;RAM&#xff09; 随机存取存储器 &#xff08;Random Access Memory&#xff09;&#xff0c;也叫主存&#xff0c;是与CPU直接交换数据的内部存储器。工作时&#xff08;刷新时除外&#xff09;可以随时从任何一个指定的地址写入&#xff08;存入&…

cocosCreator 之 crypto-es数据加密

版本&#xff1a; 3.8.0 语言&#xff1a; TypeScript 环境&#xff1a; Mac 简介 项目开发中&#xff0c;针对于一些明文数据&#xff0c;比如本地存储和Http数据请求等&#xff0c;进行加密保护&#xff0c;是有必要的。 关于加密手段主要有&#xff1a; 对称加密 使用相…

微信小程序 slot 不显示

问题:创建组件&#xff0c;使用带名字的slot&#xff0c;页面调用组件使用slot不显示 源码&#xff1a; 组件xml <view class"p-item br24" style"{{style}}"><slot name"right" wx:if"{{!custBottom}}"></slot>&l…

明星艺人类的百度百科怎么创建 ?

明星艺人们的知名度对于其事业的成功至关重要&#xff0c;而作为国内最大的中文百科全书网站&#xff0c;百度百科成为了人们获取信息的重要来源。一线明星当然百科不用自己操心&#xff0c;平台和网友就给维护了&#xff0c;但是刚刚走红的明星艺人应提早布局百科词条&#xf…

枚举类型 表示不同的 HTTP 状态码和相应的错误消息

java web业务中经常用常量来表示不同的 HTTP 响应状态,比如 public enum AppHttpCodeEnum {// 成功段0SUCCESS(200,"操作成功"),// 登录段1~50NEED_LOGIN(1,"需要登录后操作"),LOGIN_PASSWORD_ERROR(2,"密码错误"),// TOKEN50~100TOKEN_INVALID…

Docker容器音频播放之WSL篇

截至发文起&#xff0c;WSL已经支持音频播放。 但是&#xff0c;想在Docker中音频播放还需要一些额外的操作。 在启动容器时设置环境变量 PULSE_SERVER${PULSE_SERVER}并映射目录 /mnt/wslg/:/mnt/wslg/例如&#xff0c;docker-compose.yml version: 3 services:model-scop…

Who‘s Harry Potter? Approximate Unlearning in LLMs

本文是LLM系列文章&#xff0c;针对《Who’s Harry Potter? Approximate Unlearning in LLMs》的翻译。 哈利波特是谁&#xff1f;LLMs中的近似遗忘 摘要1 引言2 我们方法的描述3 评估方法4 结果5 结论 摘要 大型语言模型&#xff08;LLM&#xff09;是在大量的互联网语料库…

java商城免费搭建 VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

maven环境变量,安装源,本地仓库配置

1. maven环境变量 我这里用的是idea自带的maven 数值为&#xff1a; D:\software\computer_software\java\IDEAJ\IDEAJ2021.2.1\IntelliJ IDEA 2021.2.1\plugins\maven\lib\maven3\bin 2. 安装源更换为阿里云&#xff08;我不知道清华源是什么网址&#xff0c;网上也没查到&am…

GPT实战系列-如何用自己数据微调ChatGLM2模型训练

GPT实战系列-如何用自己数据微调ChatGLM2模型训练 目录 GPT实战系列-如何用自己数据微调ChatGLM2模型训练1、训练数据广告文案生成模型训练和测试数据组织&#xff1a; 2、训练脚本3、执行训练调整运行 4、问题解决问题一问题二问题三问题四 1、训练数据 广告文案生成模型 输…