Gerrit 事件监听实现

这篇具有很好参考价值的文章主要介绍了Gerrit 事件监听实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

环境

Centos 7.9
Gerrit 2.15

Gerrit 2.15容器搭建

docker-compose.yml

version: '3'
services:
  gerrit:
    image: gerritcodereview/gerrit:2.15
    ports:
      - 8080:8080
      - 29418:29418
    volumes:
      - ./review_site:/var/gerrit/review_site
    environment:
      - CANONICAL_WEB_URL=http://localhost:8080/
      - JAVA_HOME=/usr/lib/jvm/java
  postgres:
    image: postgres:12
    environment:
      - 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
Gerrit 事件监听实现,Gerrit,ci/cd,webhooks
配置All-Projects的Stream Events
Gerrit 事件监听实现,Gerrit,ci/cd,webhooks
代码部分

import subprocess
import json


def 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 事件监听实现,Gerrit,ci/cd,webhooks
将产物拷贝到Gerrit容器的插件目录下

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

重启Gerrit容器

docker restart gerrit
  1. 配置All-Projects

方式一 修改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-merged
  event = change-merged

[remote "project_created"]
  url = http://192.168.38.1:8081/create-jenkins-project
  event = project-created

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

上传修改

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

方式二 调用接口配置

生成密码
Gerrit 事件监听实现,Gerrit,ci/cd,webhooks

新增

curl --location --request PUT 'http://<gerrit>/a/config/server/webhooks~projects/All-Projects/remotes/配置名称(自定义)' --header 'Content-Type: application/json; charset=UTF-8' --user user:password -d '{
    "url" : "http://<web url>/xxx",
    "max_tries" : 3,
    "ssl_verify": false,
    "connection_timeout": 10000}
'
)]}'

查询

 curl --location --request GET 'http://<gerrit>/a/config/server/webhooks~projects/All-Projects/remotes' --header 'Content-Type: application/json; charset=UTF-8' --user user:password
)]}'

删除

 curl --location --request DELETE 'http://<gerrit>/a/config/server/webhooks~projects/All-Projects/remotes/配置名称(自定义)' --user user:password

本地编写web服务

from flask import Flask, request

app = 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 事件监听实现,Gerrit,ci/cd,webhooks
将在Gerrit平台上代码合入,web服务正常监听
Gerrit 事件监听实现,Gerrit,ci/cd,webhooks文章来源地址https://www.toymoban.com/news/detail-718077.html

到了这里,关于Gerrit 事件监听实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • DevOps系列文章-Kubernetes实现CI与CD配置

    DevOps系列文章-Kubernetes实现CI与CD配置

    基于 Kubernetes 实现 CI/CD 配置,其实和往常那些 CI/CD 配置并没有太大区别。都是通过 提交代码,拉取代码,构建代码,发布代码来实现的。 只不过要是通过 K8s 来实现的话,则是需要将构建好的代码打包成镜像,通过镜像的方式来运行。 CI/CD 流程图: 开发将代码提交代码仓

    2024年02月05日
    浏览(12)
  • 实现基于 GitLab 的数据库 CI/CD 最佳实践

    实现基于 GitLab 的数据库 CI/CD 最佳实践

    数据库变更一直是整个应用发布过程中效率最低、流程最复杂、风险最高的环节,也是 DevOps 流程中最难以攻克的阵地。那我们是否能在具体的 CI/CD 流程中,像处理代码那样处理数据库变更呢? DORA(DevOps Research Assessment)是一家专注于 DevOps 的研究机构, 在该领域以专业与客

    2024年02月07日
    浏览(26)
  • docker部署Jenkins(Jenkins+Gitlab+Maven实现CI/CD)

    docker部署Jenkins(Jenkins+Gitlab+Maven实现CI/CD)

          GitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。       GitLab是由GitLabInc.开发,使用MIT许可证的基于

    2024年02月03日
    浏览(17)
  • 基于k8s job设计与实现CI/CD系统

    基于k8s job设计与实现CI/CD系统

    方案一:Jenkins+k8s+CICD 方案二:kaniko+k8s job+CICD CICD 基于K8s Job设计流水线 CI方案 工具镜像 云原生镜像打包工具 kaniko的使用 与Jenkins对比  可用性与易用性 Jenkins存在Master调度瓶颈 企业研发流程的自定义 添加自定义流程 代码合并漏了的问题 CI系统:drone ci CI系统:argo cd 设计方

    2024年02月12日
    浏览(17)
  • [Docker实现测试部署CI/CD----相关服务器的安装配置(1)]

    [Docker实现测试部署CI/CD----相关服务器的安装配置(1)]

    CI,Continuous Integration,持续集成。即将持续不断更新的代码经构建、测试后也持续不断的集成到项目主干分支。 CD,包含两层含义:Continuous Delivery,持续交付,和 Continuous Deployment,持续 部署。 持续交付:是持续集成的后续步骤,持续频繁地将软件的新版本交付到类生产环境

    2024年02月14日
    浏览(10)
  • [Docker实现测试部署CI/CD----相关服务器的安装配置(2)]

    [Docker实现测试部署CI/CD----相关服务器的安装配置(2)]

            Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。 下载Linux版本的jdk,解压到/usr/local目录 进入 /etc/profile 目录,设置环境变量 刷新配置文件,输入

    2024年02月14日
    浏览(26)
  • [Docker实现测试部署CI/CD----构建成功后钉钉告警(7)]

    [Docker实现测试部署CI/CD----构建成功后钉钉告警(7)]

    首先需要在钉钉中创建一个项目群。 复制Webhook,后面在 Jenkins 配置时需要使用。         在Jennkins中下载 build user vars plugin ,获取项目中的相关变量值 在 Jenkins 中下载 DingTalk 插件。 在 Jenkins 的系统管理中可找到“钉钉”,这是安装过 DingTalk 后出现的。 修改Jenkinsfile文件

    2024年02月13日
    浏览(22)
  • [Docker实现测试部署CI/CD----Jenkins集成相关服务器(3)]

    [Docker实现测试部署CI/CD----Jenkins集成相关服务器(3)]

             SonarScanner 是一种代码扫描工具,专门用来扫描和分析项目代码质量。扫描和分析完 成之后,会将结果写入到 SonarQube 服务器的数据库中,并在 SonarQube 平台显示这些数 据。         在 SonarQube 官网的帮助文档中可以下载 SonarScanner。这里下载一个 Linux 系统下使

    2024年02月14日
    浏览(13)
  • nodejs前端项目的CI/CD实现(二)jenkins的容器化部署

    nodejs前端项目的CI/CD实现(二)jenkins的容器化部署

    docker安装jenkins,可能你会反问,这太简单了,有什么好讲的。 我最近就接手了一个打包项目,它是一个nodejs的前端项目,jenkins已在容器里部署且运行OK。 但是,前端组很追求新技术,不断地升级Nodejs的版本,之前是14,现在需要升级到16。 也就是说,原本运行顺畅的打包不

    2024年01月20日
    浏览(14)
  • 微服务 & 云原生:基于 Gogs + Drone 实现 CI/CD 自动化

    微服务 & 云原生:基于 Gogs + Drone 实现 CI/CD 自动化

    以一个简单的前后端项目来说,分别编写前后端的 Dockerfile 文件并构建镜像,然后编写 docker-compose.yml 构建部署,启动运行。每次代码变更后都需重新手动打包、构建、推送。 一个简单的例子: 前端: 项目名:kubemanagement-web 技术栈:Vue 后端: 项目名:kubemanagement 技术栈:

    2024年02月13日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包