网站首页 > 精选文章 正文
最近需要在一个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;//上传失败
}
}
猜你喜欢
- 2025-01-29 GitLab 14.6发布,优化Geo高可用,安全更新等
- 2025-01-29 Centos下安装gitlab(centos安装git命令)
- 2025-01-29 Gitlab runner(gitlab runner多台服务器部署)
- 2025-01-29 gitlab+jenkins实现自动化部署(jenkins gitlab自动部署)
- 2025-01-29 Java教程:GitLab在项目的环境搭建和基本的使用
- 2025-01-29 使用Java统计gitlab代码行数(gitee统计代码量)
- 2025-01-29 使用GitLab实现CICD(gitlab cicd)
- 2025-01-29 代码管理-git、github、gitlab(代码管理软件)
- 2025-01-29 CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
- 2025-01-29 GitLab发布Web IDE 可直接在其网站上编辑文件
- 最近发表
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)