该工具类包含了
根据项目名称查找项目信息
根据项目名称查询该项目所有分支
得到指定分支的历史记录
比较传入分支和master分支是否存在包含关系
package com.dqoms.common.utils;
import cn.hutool.core.util.ReUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.dqoms.common.constant.Constants;
import com.dqoms.common.utils.http.HttpUtils;
import kong.unirest.JsonPatchItem;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.shiro.config.Ini;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Value;
/**
* gk
* gitlab API工具类
*
*/
public class GitlabUtils {
/**
* 处理传入的gitUrl
*
* @param gitUrl
* @return
* @throws UnsupportedEncodingException
*/
public static Map<String, String> urlProcessing(String gitUrl) throws UnsupportedEncodingException {
//http://IP地址/mon/dqoms-cmdb/-/tree/gengkai
// gitUrl="http://IP地址/mon/dqoms-cmdb/-/tree/gengkai";
String[] strs = gitUrl.split("/");
String path = strs[2].toString();
String projectName = strs[4].toString();
String ref_name = strs[7].toString();
Map<String, String> map = new HashMap<String, String>();
map.put("path", path);
map.put("projectName", projectName);
map.put("ref_name", ref_name);
//开始裁剪字符串
return map;
}
/**
* 根据项目名称查找项目信息
*
* @param projectName 项目名称
* @param path 路径ip
* @return
* @throws UnsupportedEncodingException
*/
public static JSONArray getProjectId(String projectName, String path) throws UnsupportedEncodingException {
// "PRIVATE-TOKEN: 令牌"
Integer id = 0;
String paths = "http://" + path + "/api/v4/search";
String Project = HttpUtils.sendGet(paths, "search=" + projectName + "&scope=projects&all=true&access_token=令牌&per_page=50", Constants.UTF8);
if (Project.equals("")) {
return null;
}
JSONArray branch_json = JSONArray.fromObject(Project);
// if (branch_json.size()!=0){
// id = (Integer) branch_json.getJSONObject(0).get("id");
// }
// getHistoryUrl(Integer.valueOf(id),"1","1");
return branch_json;
}
/**
* 根据项目名称查询该项目所有分支
*
* @param projectName
* @param path
* @return
* @throws UnsupportedEncodingException
*/
public static String getAllBranches(String projectName, String path) throws UnsupportedEncodingException {
JSONArray projectId = getProjectId(projectName, path);
if (projectId == null) {
return "检查ip地址";
}
if (projectId.size() == 0) {
return "项目id为空,请检查项目名称或联系系统管理员";
}
//得到项目id
// Integer id = (Integer) projectId.getJSONObject(0).get("id");
int size = projectId.size();
String id = "";
for (int i = 0; i < size; i++) {
JSONObject jsonObject = projectId.getJSONObject(i);
String name = jsonObject.getString("path");
if (name.equals(projectName)) {
id = projectId.getJSONObject(i).getString("id");
}
}
String paths = "http://" + path + "/api/v4/projects/" + id + "/repository/branches";
//curl http://IP地址/api/v4/projects/9/repository/branches?access_token=令牌
String Project = HttpUtils.sendGet(paths, "access_token=令牌", Constants.UTF8);
// JSONArray jsonArray = JSONArray.fromObject(Project);
if (Project.equals("")) {
return null;
}
return Project;
}
/**
* 得到指定分支的历史记录
*
* @param projectId
* @param ref_name 分支名称 如果传入为空,则获取master
* @param path
* @return
* @throws UnsupportedEncodingException
*/
public static String getHistoryUrl(Integer projectId, String ref_name, String path) throws UnsupportedEncodingException {
if (projectId.equals("")) {
return "项目id为空";
}
String paths = "http://" + path + "/api/v4/projects/" + projectId + "/repository/commits";
//查找指定分支的所有历史记录
if (ref_name.equals("")) {
ref_name = "master";
}
String branchOfHistory = HttpUtils.sendGet(paths, "ref_name=" + ref_name + "&all=true&access_token=令牌&per_page=50", Constants.UTF8);
if (branchOfHistory.equals("[]") && ref_name.equals("master")){
ref_name = "main";
branchOfHistory = HttpUtils.sendGet(paths, "ref_name=" + ref_name + "&all=true&access_token=令牌&per_page=50", Constants.UTF8);
}
return branchOfHistory;
}
/**
* 比较传入分支和master分支是否存在包含关系
*
* @param projectName 项目名称
* @param ref_name 分支名称
* @param path
* @throws UnsupportedEncodingException
* @Author gk
*/
public static String includeDetection(String projectName, String ref_name, String path) throws UnsupportedEncodingException {
JSONArray project = getProjectId(projectName, path);
if (project.size() == 0) {
return "项目名称不可用,请检查项目名称或联系系统管理员";
}
//得到项目id
Integer projectid = (Integer) project.getJSONObject