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

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


简介

在开发中,偶尔会有一些关于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;
    }
}

三、后续更新~

催更私信作者