Gitlab Java API 使用示例
简介
在开发中,偶尔会有一些关于Gitlab的二开需求,本文将介绍如果在Java中使用Gitlab提供的API
功能介绍
示例中代码,主要的功能如下:
- 读取整个仓库中的所有文件,读取后进行相关的处理
- 使用Webhook,接收gitlab的Webhook请求,进行代码push事件的监听处理
下面具体的示例代码
代码示例
依赖导入
在maven中导入gitlab api的仓库
<dependency><groupId>org.gitlab4j</groupId><artifactId>gitlab4j-api</artifactId><version>4.19.0</version></dependency>
配置相关参考
示例中使用的Spring boot,我们在配置文件中添加相关的gitlab配置信息
主要是服务地址和相关的认证信息等,如下
application:gitlab:# gitlab访问地址host: http://127.0.0.1:81/# gitlab 访问的tokenaccessToken: xxxxxxxxxxx# 对应用户名namespace: user# 工程名称projectName: testProject# 工程对应的分支,用于区分环境branch: test
下面是对应的配置类:
@Data
@Configuration
@ConfigurationProperties(prefix = "application.gitlab")
public class GitlabConfig {private String host;private String accessToken;private String namespace;private String projectName;private String branch;
}
webhook回调接口
这里简单介绍下Webhook,其主要作用是:
- 当设置的仓库事件发生时(比如代码push,进行了一次提交)
- gitlab就会调用这个回调的接口,发送这次push相关的信息给你的服务
- 回调时里面有相关的提交信息,你可以根据相关的信息来处理
下面这个是回调的接口:
@RestController
@RequestMapping("/")
public class GitlabController {// gitlab仓库push操作时的回调接口@PostMapping("/event/push")public RespResult<String> pushEvent(@RequestBody GitlabPushEvent gitlabPushEvent) {gitlabService.pushEvent(gitlabPushEvent);return RespResult.<String>builder().code("200").data("success").build();}
}
这个是回调的参考,里面有很多,这个类只取了主要的信息,如下所示:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class GitlabPushEvent {// 这个提交的分支信息private String ref;// 提交的详细信息private List<Commit> commits;@Data@Builder@AllArgsConstructor@NoArgsConstructorpublic static class Commit {// 新增的文件列表private List<String> added;// 修改的文件列表private List<String> modified;// 删除的文件列表private List<String> removed;}
}
相关的处理逻辑
下面是简单使用示例
@Slf4j
@Service
public class GitlabService {private final GitlabConfig gitlabConfig;private final GitLabApi gitLabApi;public GitlabService(final GitlabConfig gitlabConfig, final GitbookConfig gitbookConfig) {this.gitlabConfig = gitlabConfig;// 传入gitlab服务地址和token,初始化服务gitLabApi = new GitLabApi(gitlabConfig.getHost(), gitlabConfig.getAccessToken());}private void readAllFile(final Project project) {// 读取指定项目的,指定分支的工程final Project project = gitLabApi.getProjectApi().getProject(gitlabConfig.getNamespace(), gitlabConfig.getProjectName());// 获取工程的所有文件final List<String> allFil = getAllFiles(project.getId(), gitlabConfig.getDirectory(), gitlabConfig.getBranch());// 遍历获取所有文件,进行相关的处理allFil.forEach(filePath -> {// 读取文件内容final InputStream inputStream = gitLabApi.getRepositoryFileApi().getRawFile(projectId, branch, filePath);final BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));final StringBuilder stringBuilder = new StringBuilder();while (reader.ready()) {final String lineContent = reader.readLine();}stringBuilder.append(lineContent);// todo 进行相关的处理}});}// 读取工程仓库的所有文件列表@SneakyThrowsprivate List<String> getAllFiles(final Integer projectId, final String directory, final String branch) {List<String> fileNames = new ArrayList<>();gitLabApi.getRepositoryApi().getTree(projectId, directory, branch).forEach(file -> {// 如果当前是目录,则继续获取其下的文件列表if (file.getType().equals(TreeItem.Type.TREE)) {fileNames.addAll(getAllFiles(projectId, file.getPath(), branch));return;}// 如果是文件类型,直接添加final String filePath = String.join("/",directory, file.getName());fileNames.add(filePath);log.info("add file: {}", filePath);});return fileNames;}// Webhook回调函数处理,根据自己的需求进行处理@SneakyThrowspublic void pushEvent(GitlabPushEvent gitlabPushEvent) {log.info("收到Gitlab Webhook请求");if (!gitlabPushEvent.getRef().equals(String.format("refs/heads/%s", gitlabConfig.getBranch()))) {log.info("非设定分支的push事件,不进行更新");return;}for (GitlabPushEvent.Commit commit: gitlabPushEvent.getCommits()) {for (String filePath: commit.getAdded()) {// todo 处理新增的文件}for (String filePath: commit.getModified()) {// todo 处理修改的文件}for (String filePath: commit.getRemoved()) {// todo 处理删除的文件}}}
}
Gitlab Java API 使用示例相关推荐
- libsvm java 实例_LibSVM Java API调用示例程序
[实例简介] LibSVM Java API调用示例程序 Eclipse 完整工程可以运行 相关详情见http://blog.csdn.net/yangliuy/article/details/804 ...
- RocksDB Java API 操作示例
1. RocksDB特点 rocksDB 是一个可嵌入的,持久性的 key-value存储.基于Google的LevelDB,但提高了扩展性可以运行在多核处理器上,可以有效使用快速存储,支持IO绑定. ...
- jdeveloper_在JDeveloper 12.1.3中为WebSocket使用Java API
jdeveloper 介绍 最新版本的JDeveloper 12c(12.1.3.0)和WebLogic Server 12.1.3一起提供了一些新的Java EE 7功能. 其中之一是对用于WebS ...
- .jdeveloper_在JDeveloper 12.1.3中为WebSocket使用Java API
.jdeveloper 介绍 最新版本的JDeveloper 12c(12.1.3.0)和WebLogic Server 12.1.3一起提供了一些新的Java EE 7功能. 其中之一是对用于Web ...
- 在JDeveloper 12.1.3中将Java API用于WebSockets
介绍 最新版本的JDeveloper 12c(12.1.3.0)和WebLogic Server 12.1.3一起提供了一些新的Java EE 7功能. 其中之一是对用于WebSocket的JSR 3 ...
- 【Kotlin】apply 内联扩展函数 ( apply 函数原型 | apply 函数示例 | Kotlin 调用 Java API )
文章目录 I . 内联扩展函数 apply II . Kotlin 调用 Java API III . apply 内联扩展函数示例 ( 调用 Java API 处理图像 ) I . 内联扩展函数 a ...
- 顺丰api相关示例 - java版本(带打印)
本来一个简简单单的调用api实现的东西根本没必要单独写一篇博客. ....但是!这个顺丰坑实在是太多了!!!让我都有点想骂人了都 实在忍不住吐槽几点: 丰桥的客服qq群,问了一天没人搭理我,真是应了那 ...
- mongodb java 更新数据_MongoDB JAVA API更新数据示例
[java获得数据库信息常用API(DatabaseMetaData)示例] /** * MongoDBTest * MongoDB更新数据使用示例 */ package com.labci.mong ...
- Es elasticsearch 十七 Java api 实现聚合 几个聚合示例 sql 开启许可 新特效 java 实现es7 sql 功能
目录 Java api 实现聚合 依赖 简单聚合按照颜色分组获取每个卖出数量 聚合每个颜色卖出数量,及平均价格(每个分桶子聚合) 按照颜色分组 ,获取销售数量,avg min max sum 按照60 ...
最新文章
- atmega8 例程:T1定时器 快速PWM
- 双击jar运行main主函数实现-fatJAR
- java怎么防止表单重复提交_如何防止表单重复提交
- Android -- Fragment动画异常Unknown animation name: objectAnimator
- 讲讲OC曲线是什么?
- 如果 AI 和算法无罪,那么谁在杀死穷人?
- java中Decimaformat_Java中 DecimalFormat 用法详解
- 不同用户同时并发测压_教你 7 招,迅速提高服务器并发能力!
- SetDockingMode 设置dock停泊方式
- 处理IE6下PNG图片透明背景问题
- Opencv+opencv_contrib安装
- 大学计算机学术活动,计算机学院学术活动公告---南京理工大学Wai-Tat Fu教授学术报告...
- codeforces #630 F. Selection of Personnel
- Latex取消英语单词自动断行
- 图表示学习之时序的事件和节点动态
- 防火墙之ipsec vpn实验
- 谷歌浏览器如何配置SSL证书
- Educational Codeforces Round 132 (Rated for Div. 2) 题解(A~D)
- 本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止.
- eds能谱图分析实例_基础理论丨一文了解XPS(概念、定性定量分析、分析方法等)...