使用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