网站首页 > 博客文章 正文
最近需要在一个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;//上传失败
}
}
- 上一篇: 使用Java统计gitlab代码行数
- 下一篇: 开发人员自我提升 - 软件开发技术术语表
猜你喜欢
- 2025-05-28 代码评审,揭示黑盒背后的真相
- 2025-05-28 盘点10个优秀的Github开源项目
- 2025-05-28 深度解析Spring Boot微服务部署实践指南
- 2025-05-28 如何检查软件依赖包的安全性
- 2025-05-28 应用软件安全
- 2025-05-28 如何设计Agent的记忆系统
- 2025-05-28 太牛了,Java学习全景图:一张图搞定核心知识体系
- 2025-05-28 Java面试题:拆分微服务应该注意哪些地方方,如何...
- 2025-05-28 开发人员自我提升 - 软件开发技术术语表
- 2025-05-28 使用Java统计gitlab代码行数
你 发表评论:
欢迎- 436℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 417℃初次使用IntelliJ IDEA新建Maven项目
- 414℃Maven技术方案最全手册(mavena)
- 408℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 397℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 394℃利用idea快速搭建一个项目(idea怎么建工程)
- 388℃IT全明星|IntelliJ IDEA学习笔记(四、idea中怎么创建maven项目)
- 388℃无文件攻击:虚拟化安全如何做好针对性防护 (只做干货),关注交流
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)