网站首页 > java教程 正文
最近需要在一个WEB项目中集成GitLab,用到了GitLab的API操作,在网上找了很久都是说直接调用GitLab的Http接口,而且API官方只有javadoc没有其它说明文档,特别记录下,以备查询。这里采用Token的认证方式,因此需要先登陆GitLab新建一个Token,创建方式如下:
创建完成以后,就可以在API中通过Token进行登陆并操作该GitLab服务了,以下是源码
package org.noka.gitlab.gitlab.service;
import org.apache.commons.codec.binary.Base64;
import org.gitlab.api.GitlabAPI;
import org.gitlab.api.models.GitlabBranch;
import org.gitlab.api.models.GitlabProject;
import org.gitlab.api.models.GitlabRepositoryFile;
import org.gitlab.api.models.GitlabSimpleRepositoryFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/** ------------------------------------------------------------
* GitLab 操作服务
* 包含分支创建,获取分支列表,上传文件,下载文件
* 依赖于java-gitlab-api 4.1.1
* @author xiefangjian@163.com
* @version 1.0.0
** ---------------------------------------------------------**/
@Service
public class GitLabService {
private static Logger logger = LoggerFactory.getLogger(GitLabService.class);
@Value("${gitlab.token}")
private String token; //GitLab Token,这里用gitlab的token连接,也可以用用户名和密码连接
@Value("${gitlab.url}")
private String url; //GitLab 服务器地址
@Value("${gitlab.projectid}")
private String projectid; //项目ID
/**
* 创建分支
* @param name 新分支的名称
* @param ref 分支来源
* @return 分支创建成功返回true,创建失败返回false
*/
public boolean createBaranche(String name,String ref){
try {
GitlabAPI api = GitlabAPI.connect(url, token);//连接服务器
api.setConnectionTimeout(200);//设置连接超时
GitlabProject gp = api.getProject(projectid);//根据项目ID切换到指定项目的仓库
//以上部分代码也可以在spring中通过注解引入
api.createBranch(gp,name,ref);//在指定项目下创建分支
return true;//创建成功
}catch (Exception ex){
logger.error(ex.getMessage());
}
return false;//创建失败
}
/**
* 获取分支列表
* @return 成功时返回分支列表,失败返回null
*/
public List<GitlabBranch> getListBranches(){
try {
GitlabAPI api = GitlabAPI.connect(url, token);//连接服务器
api.setConnectionTimeout(200);//设置连接超时
GitlabProject gp = api.getProject(projectid);//根据项目ID切换到指定项目的仓库
return api.getBranches(gp);//获取所有分支
}catch (Exception ex){
logger.error(ex.getMessage());
}
return null;//获取失败时返回null
}
/**
* 下载文件
* @param path 文件路径
* @param ref 文件所在分支
* @return 成功返回文件内容,失败返回null
*/
public byte[] getFile(String path,String ref){
try {
GitlabAPI api = GitlabAPI.connect(url, token);//连接服务器
api.setConnectionTimeout(200);//设置连接超时
GitlabProject gp = api.getProject(projectid);//根据项目ID切换到指定项目的仓库
GitlabRepositoryFile gfile = api.getRepositoryFile(gp,path,ref);//根据项目,路径,分支获取具体的文件内容
Base64 bs = new Base64();//Base64转换工具类,依赖于commons-codec 1.14
return bs.decode(gfile.getContent());//从GitLab上获取的文件是以Base64字符串形式返回的,需要转成byte[]
}catch (Exception ex){
logger.error(ex.getMessage());
}
return null;//失败返回null
}
/**
* 上传文件
* @param branch 需要上传到具体哪个分支
* @param path 文件在GitLab上的路径,可以有多级目录如/doc/man/等,如果目录不存在会自动创建
* @param msg 文件上传备注
* @param file 文件对象
* @return 成功返回true 失败返回false
*/
public boolean upfile(String branch,String path,String msg,MultipartFile file){
try {
GitlabAPI api = GitlabAPI.connect(url, token);//连接服务器
api.setConnectionTimeout(200);//设置连接超时
GitlabProject gp = api.getProject(projectid);//根据项目ID切换到指定项目的仓库
Base64 bs = new Base64();//Base64转换工具类,依赖于commons-codec 1.14
String body = bs.encodeAsString(file.getBytes());//文件内容,GitLab只接受Base64字符串的文件内容,这里需要将文件转换成Base64字符串上传
try {
GitlabSimpleRepositoryFile gf = api.createRepositoryFile(gp, path+"/" + file.getOriginalFilename(), branch, msg, body);//上传文件
}catch (Exception es) {//文件存在
logger.error(path+"/" + file.getOriginalFilename()+" 所传文件已经存在,执行更新操作");
api.updateRepositoryFile(gp, path+"/" + file.getOriginalFilename(), branch, msg, body);//更新文件
}
return true;//上传成功
}catch (Exception ex){
logger.error(ex.getMessage());
}
return false;//上传失败
}
}
猜你喜欢
- 2024-10-14 Java API接口命名规范(java接口命名规则)
- 2024-10-14 Java常用的API总结(java中的api使用手册)
- 2024-10-14 java使用apache poi操作word文档(java api doc)
- 2024-10-14 关于Java API应用技巧(java常用api汇总)
- 2024-10-14 java与es8实战:Java API Client有关的知识点串讲
- 2024-10-14 Java Scripting API 使用示例(java script功能)
- 2024-10-14 springboot-如何集成Swagger3生成接口文档
- 2024-10-14 Java String类(java string类型比较)
- 2024-10-14 一款零注解侵入的 API 文档生成工具,你用过吗?
- 2024-10-14 Java 文档注解最全详解,建议收藏!
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)