1. 需求
项目组 需要做统计,获取每个开发人员的代码提交次数,提交时间,提交人等等,因代码在GitLab上管理,所以需要调用GitLabAPI来获取。
2. 开发
API官网:https://docs.gitlab.com/ee/api/
2.1 创建自定义令牌
自定义令牌是为了后续接口访问有权限而建立的。
创建 GitLab 个人访问令牌的方法如下:
- 在任何页面的右上角,单击您的个人资料照片,然后单击 “Settings(设置)”。
- 在左侧边栏中,单击 “Developer settings(开发者设置)”。
- 在左侧边栏中,单击 “Personal access tokens(个人访问令牌)”。
- 单击 “Generate new token(生成新令牌)”。
- 给令牌一个描述性名称。
- 选择要授予此令牌的作用域或权限。
- 要使用令牌从命令行访问仓库,请选择 “repo(仓库)”。
- 单击 “Generate token(生成令牌)”。
- 单击 “将令牌复制到剪贴板”。
请注意,离开此页面后,您将无法再次看到令牌,所以一定要保留好令牌。像对待密码一样对待您的令牌,确保其机密性。
2.2 找项目ID
第一步需要找项目的ID,这个不知道怎么找,我的方法是在gitlab项目上打开F12看控制台,看他们的接口访问的适合用的ID。
如图:110 就是项目ID,拿着项目ID能办很多事儿。
2.3 调接口
直接上代码了:
@Slf4j
@Service
public class GitLabApiCallService {
@Resource(name = "initRestTemplate")
private RestTemplate restTemplate;
/**
* 获取 项目下的文件 下的文件
* @return
*/
public JSONArray getTree(Integer page) throws Exception{
String gitLabToken = ModelConfig.getGitLabToken();
String gitLabApiUrl = ModelConfig.getGitLabApiUrl();
String projectId = "110";
String directoryPath = "aaaaa";
String baseUrl = String.format("%s/projects/%s/repository/tree?ref=master&path=%s&per_page=100&page="+page,
gitLabApiUrl,projectId,directoryPath);
// 设置请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
headers.set("Private-Token",gitLabToken);
HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(null, headers);
// 执行
log.debug("url:{} , requestEntity: {} ", baseUrl, requestEntity);
ResponseEntity<String> response = restTemplate.exchange(baseUrl, HttpMethod.GET, requestEntity, String.class);
// 处理返回值
if (response.getStatusCode() == HttpStatus.OK) {
log.info("GET request successful");
String body = response.getBody();
if(StrUtil.isNotBlank(body)){
JSONArray jsonArray = JSONArray.parseArray(body);
log.debug("结果:{}",jsonArray);
return jsonArray;
} else {
return null;
}
} else {
log.error(" GET request failed");
return null;
}
}
/**
* 查看提交记录
* @return
*/
public JSONArray getCommit(String filePath) throws Exception {
String gitLabToken = ModelConfig.getGitLabToken();
String gitLabApiUrl = ModelConfig.getGitLabApiUrl();
String projectId = "110";
String directoryPath = "aaaa";
Integer per_page = 201000;
String baseUrl = String.format("%s/projects/%s/repository/commits?ref_name=master&path=%s",
gitLabApiUrl,projectId,filePath);
// 设置请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
headers.set("Private-Token",gitLabToken);
// 绑定请求头
HttpEntity<String> requestEntity = new HttpEntity<>(null, headers);
// 执行
log.debug("url:{} , requestEntity: {} ", baseUrl, requestEntity);
ResponseEntity<String> response = restTemplate.exchange(baseUrl, HttpMethod.GET, requestEntity, String.class);
// 处理返回值
if (response.getStatusCode() == HttpStatus.OK) {
log.info("GET request successful");
String body = response.getBody();
if(StrUtil.isNotBlank(body)){
JSONArray jsonArray = JSONArray.parseArray(body);
log.debug("结果:{}",jsonArray);
return jsonArray;
} else {
return null;
}
} else {
log.error("GET request failed");
return null;
}
}
}
String gitLabToken = ModelConfig.getGitLabToken();
String gitLabApiUrl = ModelConfig.getGitLabApiUrl();
这些都是配置的全局变量,可以根据自己的环境配置。
上面的代码只是个例子:很多接口类同。
需要注意的是分页最多返回100条,如果需要获取全部数据,需要自己写递归啊循环啊啥的怎么方便怎么来。文章来源:https://www.toymoban.com/news/detail-730940.html
若有错误,希望大佬指出。
对你有帮助给点个👍再走呗。文章来源地址https://www.toymoban.com/news/detail-730940.html
到了这里,关于Java 调用 GitLabAPI 获取仓库里的文件件 提交记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!