Gitlab Java API 使用示例(亲测、有效)

2023-11-19

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


简介

在开发中,偶尔会有一些关于Gitlab的二开需求,本文将介绍使用Java语言操作Gitlab提供的API,进行仓库的相关操作

GitLab的部署可以查阅docker部署GitLab文章进行搭建


一、依赖、常量

Maven依赖

<dependency>
     <groupId>org.gitlab4j</groupId>
     <artifactId>gitlab4j-api</artifactId>
     <version>4.19.0</version>
</dependency>

定义常量类

可以将常量抽取到配置文件XML中,通过@ConfigurationProperties读取,本文采用常量类方式进行抽取。

public class EduConstants {

    /**
     * GitLab远程主机地址
     */
    public static final String GITLAB_REMOTE_USERNAME = "http://192.168.200.250:9980";
    /**
     * GitLab远程主机密码(自己搭建的时,设计的密码)
     */
    public static final String GITLAB_REMOTE_PWD = "123456789";

    /**
     * gitLab部署远程主机地址(免邮箱注册用户时用到)
     */
    public static final String REMOTE_HOSTNAME = "192.168.200.200";
    /**
     * gitLab部署远程主机用户名
     */
    public static final String REMOTE_USERNAME = "root";
    /**
     * gitLab部署远程主机密码
     */
    public static final String REMOTE_PWD = "root";
    /**
     * gitLab访问令牌tonken(根据个人环境生成密钥)
     */
    public static final String GITLAB_TOKEN = "xxxxxxx-xxxxxx-xxxxxxxxx";

}

二、增删改查

1.新增私有仓库

实体类

public class CreateRepoDto {
    /**
     * gitLab-账号
     */
    private String userName;
    /**
     * 项目Id
     */
    private Integer projectId;
    /**
     * 项目名称
     */
    private String projectName;
    /**
     * 项目介绍
     */
    private String projectDescribe;
    /**
     * 项目是否开源
     */
    private String visibility;
}

Controller

@RestController
@RequestMapping("/repo")
public class EduUserRepoController {
	@Autowired
    private EduUserRepoService eduUserRepoService;
	/**
     * 创建新的项目
     * {
     *     "userName": "gitLab",
     *     "projectName": "testPublic",
     *     "projectDescribe": "自己搭建的内容"
     * }
     */
	@PostMapping("createRepo")
    public AjaxResult createRepo(@RequestBody CreateRepoDto createRepoDto) {
        String msg = eduUserRepoService.createRepo(createRepoDto);
        if (StringUtils.isNotEmpty(msg)) {
            return AjaxResult.error(msg);
        }
        return AjaxResult.success();
    }
}

Service

@Service
public interface EduUserRepoService {
	 /**
     * 创建新的项目
     */
    String createRepo(CreateRepoDto createRepoDto);
}

ServiceImpl

public class EduUserRepoServiceImpl implements EduUserRepoService {
	 /**
     * 创建新的项目
     */
    @Override
    public String createRepo(CreateRepoDto createRepoDto) {
        //获取用户名称(默认是root用户)
        String userName = "root";
        //进行登录,GitLab地址、用户名、密码
		GitLabApi gitlabapi = null;
        try {
        	gitlabapi = GitLabApi.oauth2Login(
        	GITLAB_REMOTE_USERNAME, 
        	userName, 
        	GITLAB_REMOTE_PWD);
        } catch (GitLabApiException e) {
        }
        String msg = "";
        Project projectSpec = new Project()
                .withName(createRepoDto.getProjectName());
        //项目介绍不为空,则添加
        if (StringUtils.isNotEmpty(createRepoDto.getProjectDescribe())) {
            projectSpec.withDescription(createRepoDto.getProjectDescribe());
        }
        try {
            gitLabApi.getProjectApi().createProject(projectSpec);
        } catch (GitLabApiException e) {
            //创建过程中出现的问题后,进行接收问题
            msg = e.getMessage();
        }
        return msg;
    }
}

2.删除指定仓库

Controller

@RestController
@RequestMapping("/repo")
public class EduUserRepoController {
	@Autowired
    private EduUserRepoService eduUserRepoService;

    /**
     * 删除指定仓库
     */
    @GetMapping("deleteRepo")
    public AjaxResult deleteRepo(String projectId) {
        return AjaxResult.success(eduUserRepoService.deleteRepo(projectId));
    }
}

Service

public interface EduUserRepoService {
     /**
     * 删除指定仓库
     *
     * @return
     */
    Object deleteRepo(String projectId);
}

ServiceImpl

public class EduUserRepoServiceImpl implements EduUserRepoService {
    /**
     * 删除指定仓库
     *
     * @return
     */
    @Override
    public Object deleteRepo(String projectId) {
        //获取用户名称(指定)
        String userName = "root";
        //进行登录,GitLab地址、用户名、密码
		GitLabApi gitlabapi = null;
        try {
        	gitlabapi = GitLabApi.oauth2Login(
        	GITLAB_REMOTE_USERNAME, 
        	userName, 
        	GITLAB_REMOTE_PWD);
        } catch (GitLabApiException e) {
        }
        String msg = "";
        try {
            gitLabApi.getProjectApi().deleteProject(projectId);
        } catch (GitLabApiException e) {
            e.printStackTrace();
        }
        msg = "删除成功";
        return msg;
    }
}

3.修改项目简介和是否开源

Controller

@RestController
@RequestMapping("/repo")
public class EduUserRepoController {
	@Autowired
    private EduUserRepoService eduUserRepoService;

    /**
     * 修改项目简介和是否开源
     *(Dto上文有使用到)
     * @return
     */
    @PostMapping("updateProject")
    public AjaxResult updateProject(@RequestBody CreateRepoDto createRepoDto) {
        return AjaxResult.success(eduUserRepoService.updateProject(createRepoDto));
    }
}

Service

public interface EduUserRepoService {
    /**
     * 修改项目简介和是否开源
     */
    Object updateProject(CreateRepoDto createRepoDto);
}

ServiceImpl

public class EduUserRepoServiceImpl implements EduUserRepoService {
   	/**
     * 修改项目简介和是否开源
     */
    @Override
    public Object updateProject(CreateRepoDto createRepoDto) {
        //获取用户名称
        String userName = "root";
		//进行登录,GitLab地址、用户名、密码
		GitLabApi gitlabapi = null;
        try {
        	gitlabapi = GitLabApi.oauth2Login(
        	GITLAB_REMOTE_USERNAME, 
        	userName, 
        	GITLAB_REMOTE_PWD);
        } catch (GitLabApiException e) {
        }        Project project = new Project();
        //根据项目的id,修改对应内容
        project.setId(createRepoDto.getProjectId());
        project.setDescription(createRepoDto.getProjectDescribe());
        //修改仓库为私有仓库
        if (createRepoDto.getVisibility().equals("private")) {
            project.setVisibility(Visibility.PRIVATE);
            System.out.println("修改项目为私有");
        }
        //修改仓库为公开仓库
        if (createRepoDto.getVisibility().equals("public")) {
            project.setVisibility(Visibility.PUBLIC);
            System.out.println("修改项目为公开");
        }
        Object msg = "";
        try {
            gitLabApi.getProjectApi().updateProject(project);
            msg = "修改成功";
        } catch (GitLabApiException e) {
            //e.printStackTrace();
        }
        return msg;
    }
}

三、后续更新~

催更私信作者

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gitlab Java API 使用示例(亲测、有效) 的相关文章

随机推荐

  • 【JavaScript 逆向】猿人学 web 第十八题:jsvmp,洞察先机

    案例目标 网址 第十八题 jsvmp 洞察先机 猿人学 本题目标 抓取 5 页数字 计算加和并提交结果 常规 JavaScript 逆向思路 一般情况下 JavaScript 逆向分为三步 寻找入口 逆向在大部分情况下就是找一些加密参数到底
  • 2019 icpc西安邀请赛 点分治

    https nanti jisuanke com t 39277 求 sum 异或和为0的路径 被其他路径包含的次数 如果只是求异或和为0的路径数量 其实是裸点分治 但是加上要求之后 就会复杂一些 进行分类讨论 再特殊处理根节点就行 由于信
  • Unraid使用记录:使用Docker与虚拟机

    文章目录 前言 使用Docker 使用示例 相关说明 使用虚拟机 使用示例 相关说明 硬件直通 后记 前言 Unraid本身功能挺少的 很多功能都是要通过插件 Docker和虚拟机来实现的 Docker可以简单的实现各种丰富的功能 而虚拟机
  • 群晖DS Video(Station)自动同步视频简介和海报(最新官方解决方案)

    目录 一 前言 二 前提 三 实现 1 注册The Movie Database账号 2 创建API 3 修改群辉Hosts A 在群辉中开启SSH的访问 B 然后通过ssh命令登录到群辉后台 C 通过sudo i指令切换到root用户指令
  • python的循环控制结构_Python的控制结构之For、While、If循环问题

    传统Python语言的主要控制结构是for循环 然而 需要注意的是for循环在Pandas中不常用 因此Python中for循环的有效执行并不适用于Pandas模式 一些常见控制结构如下 for循环 while循环 if else语句 tr
  • 【建议收藏!】APP UI自动化测试,思路全总结在这里了。

    首先想要说明一下 APP自动化测试可能很多公司不用 但也是大部分自动化测试工程师 高级测试工程师岗位招聘信息上要求的 所以为了更好的待遇 我们还是需要花时间去掌握的 毕竟谁也不会跟钱过不去 接下来 一起总结一下APP UI自动化测试的思路吧
  • 再论人与人的三大关系:生存关系、性关系和经济关系

    黄仁宇在 关系 一文中认为 人类的各种关系之中 以生存的关系 性关系和经济关系最为重要 理想上的工作协作和团队精神 已经不存在 俺做过的几个规模在50人以下的 这说明两个问题 1 小公司的目的不是发展而是不死 然后赚钱 也就是这是一笔买卖而
  • exe4j打包exe_JDK11及以后版本在Win下的打包发布方法

    概述 我在准备使用高版本jdk后 遇到的最麻烦的问题就是打包发布了 主要原因还是jdk的模块化带来的 在经历了长时间折腾后 终于成功完成了这个 当然 只是针对window下的 想要使用高版本jdk打包发布Windows应用 需要准备 exe
  • js中的对象 函数 原型

    关于 Function Object 和 proto prototype 1 每一个对象实例都有一个 proto 属性 这个属性就是指向 对象构造函数的原型 let b new Function console log b proto Fu
  • 【Matlab图片剪裁】

    标题Matlab剪裁图片 提取感兴趣部分 问题描述 当需要从一幅图片中提取一些感兴趣的内容时 比如一些细小的文字 图案等 如果从整个图片中直接提取 必然会大大增加计算量 导致处理时间很长 而且多数计算都是无效计算 进而非常消耗资源 解决办法
  • impala 错误

    问题一 impala state store unrecognized service 原因 当前节点未成功安装impala server impala state store impala catalog 解决方案 yum install
  • Qt生成log日志文件

    摘要 本文在Qt程序中实现了日志功能 读者可以在此基础上进一步创作和拓展 介绍 系统日志一般指存放系统重要运行信息的log txt文件 主要作用有两个 1 记录系统重要的运行信息 2 当系统突然崩溃时 可以根据日志来跟踪和定位程序错误 Qt
  • 常见CAD/CAM控件大全

    前言 CAD CAM 计算机辅助设计与制造 技术是随着计算机和数字化信息技术发展而形成的新技术 是20世纪最杰出的工程成就之一 也是数字化 信息化制造技术的基础 其发展和应用对制造业产生了巨大的影响和推动作用 经过几十年的发展和应用 不仅C
  • Python+Selenium爬虫之动态验证码的处理

    目录 1 拖动下方滑块完成拼图 单独图片 2 拖动下方滑块完成拼图 共同图片 可拖动验证码分为空缺区域为单独的图片和空缺区域与背景图片为一个共同图片 所以实现方式有2种 1 拖动下方滑块完成拼图 单独图片 拖动验证码 实现原理 查看空缺区域
  • [VScode]终端回应“pnpm : 无法将“pnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。“解决思路

    问题概述 遇到问题 在VScode终端输入pnpm install有错误提示 pnpm 无法将 pnpm 项识别为 cmdlet 函数 脚本文件或可运行程序的名称 请检查名称的拼写 如 果包括路径 请确保路径正确 然后再试一次 所在位置 行
  • wps表格中的文字不能顺利水平居中的解决办法

    今天调整别人做的表格 想要把表格中文字水平居中 竟然指令操作后发现很多行的表格无动于衷 发现这样设置一下应该可以解决 WPS文字右边有个小的下拉箭头 选择 格式 段落进行设置 段前段后设置为0 行距设置为单倍行距或者固定行距 固定行距需要测
  • maven私服不能重复部署解决方法

    maven私服不能重复部署解决 1 报错 Return code is 400 ReasonPhrase Repository does not allow updating assets maven releases 2 原因 经排查发现
  • Elasticsearch 7.x生产配置

    虽然Elasticsearch需要很少的配置 但是有一些设置需要手动配置 并且必须在进入生产之前进行配置 1 官方文档 这些重要配置说明 请参考官方文档 https www elastic co guide en elasticsearch
  • c++得到窗口句柄

    include
  • Gitlab Java API 使用示例(亲测、有效)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 简介 一 依赖 常量 Maven依赖 定义常量类 二 增删改查 1 新增私有仓库 2 删除指定仓库 3 修改项目简介和是否开源 三 后续更新 简介 在开发中 偶尔会