展开

文章目录

修改历史

修改历史记录

  1. 2023-09-19 09:24:28
  2. 2023-09-19 09:23:54

Gerrit接口使用说明

2023-09-18 23:55:56 Git 52

简介

Gerrit是一款功能强大的代码协作开发管理工具,其强制的代码审核功能,是其最大亮点、特色之一,同时还有细化到分支的权限控制等,本系列用来总结Gerrit相关调研内容。

使用Gerrit的REST API默认是匿名用户的权限,如果需要鉴权可以通过下面的方式实现,比如访问/project/需要鉴权在前面加上/a/就可以了,访问鉴权/a/projects/接口

1. 获取Gerrit的Token

在用户设置界面的HTTPCredentials, 如下图

点击GENERATE NEW PASSWORD会弹出包含有Token的弹框,如下图New Password后面的就是 REST API的鉴权Token

2. 使用HTTP Basic鉴权

Gerrit使用的HTTP Basic的方式进行鉴权,在1.1获取Token后可以通过下面的方式去访问REST API接口

  • 命令行

curl --user admin:token https://gerrit.cn/a/projects/
  • python示例

import requests 
url = f'http://172.20.107.233:8888/a/projects/' 
res = requests.get(url, auth=('admin', token)) 
print(res.text)
上面的token替换成上面获取的实际Token,Gerrit的地址替换成真实地址!

正常的话,会返回下面的响应内容

)]}'
{
  "All-Projects": {
    "id": "All-Projects",
    "state": "ACTIVE",
    "web_links": [
      {
        "name": "browse",
        "url": "/plugins/gitiles/All-Projects"
      }
    ]
  },
  "All-Users": {
    "id": "All-Users",
    "state": "ACTIVE",
    "web_links": [
      {
        "name": "browse",
        "url": "/plugins/gitiles/All-Users"
      }
    ]
  },
  "hello": {
    "id": "hello",
    "state": "ACTIVE",
    "web_links": [
      {
        "name": "browse",
        "url": "/plugins/gitiles/hello"
      }
    ]
  }
}
需要注意的是,为了防止XSSI(XSSICross Site Script Inclusion)攻击,JSON响应数据前面包含了)]}'字符,在后续的数据处理中需要将其删除。

3. 使用pygerrit2库访问Gerrit接口

由于Gerrit没有像python-gitlab那样的库,但是可以使用pygerrit2库来简化对Gerrit平台的API调用

pip install pygerrit2

简单的使用示例

from pygerrit2 import HTTPBasicAuth, GerritRestAPI

class GerritAPI:
    def __init__(self, url, username, password):
        self.gt = GerritRestAPI(url, auth=self.auth(username, password))

    def auth(self, username, password):
        return HTTPBasicAuth(username, password)

    def get_all_projects(self):
        projects = self.gt.get('/projects/')
        return projects
 
kgt = GerritAPI(
    url='http://172.20.107.241:8080',
    username='admin',
    password='替换为gerrit用户的密码'
)

# 获取授权用户所能查看的所有仓库列表
print(kgt.get_all_projects())

虽然使用requests或者自带的urllib库也可以访问Gerrit的API接口,但是使用pygerrit2库可以简化我们的操作,比如

  • Gerrit接口返回数据的预处理

  • 默认添加了授权,不需要在接口前面增加/a

0条评论