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条,如果需要获取全部数据,需要自己写递归啊循环啊啥的怎么方便怎么来。
若有错误,希望大佬指出。
对你有帮助给点个👍再走呗。