项目组 需要做统计,获取每个开发人员的代码提交次数,提交时间,提交人等等,因代码在GitLab上管理,所以需要调用GitLabAPI来获取。
API官网:https://docs.gitlab.com/ee/api/
自定义令牌是为了后续接口访问有权限而建立的。
创建 GitLab 个人访问令牌的方法如下:
请注意,离开此页面后,您将无法再次看到令牌,所以一定要保留好令牌。像对待密码一样对待您的令牌,确保其机密性。
第一步需要找项目的ID,这个不知道怎么找,我的方法是在gitlab项目上打开F12看控制台,看他们的接口访问的适合用的ID。
如图:110 就是项目ID,拿着项目ID能办很多事儿。
直接上代码了:
@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条,如果需要获取全部数据,需要自己写递归啊循环啊啥的怎么方便怎么来。
若有错误,希望大佬指出。
对你有帮助给点个再走呗。