GitLab Open Api 到底能帮助我们干什么
GitLab Open Api 到底能帮助我们干什么?
在
Gitlab
界面不是这些都是可视化的,我点击New subgroup
按钮后可以创建一个仓库分组,我点击New Project
可以创建一个空的仓库,我想创建分支(Branches)、标签(tags)都使用命令行或者直接再界面点击点击就创建了,什么场景下会需要用到他的API
呢?以下是GitLab
开放接口的一些常见功能作用介绍
GitLab
开放接口(API)提供了一组功能丰富的端点和方法,允许开发者通过编程方式与GitLab进行交互。以下是一些可以通过GitLab开放接口实现的常见功能:
-
仓库管理:你可以使用
GitLab API
来创建、删除和修改仓库,包括分支、标签、合并请求等。 -
用户管理:通过
GitLab API
,你可以管理用户账户,例如创建新用户、更新用户信息、重置密码等。 -
项目协作:
GitLab API
可以帮助你获取、创建和管理合并请求、问题、评论等,从而实现项目的协作开发和问题跟踪。 -
CI/CD集成:你可以使用
GitLab API
与CI/CD流水线进行集成,例如触发构建、获取流水线状态、获取构建日志等。 -
权限管理:通过
GitLab API
,你可以管理用户、组织和项目的访问权限,例如添加、删除和修改用户的角色和权限设置。 -
数据查询:
GitLab API
提供了丰富的查询功能,例如获取仓库列表、获取提交历史、搜索代码等。
简单说就是能通过脚本调Gitlab Open Api
能解决你繁琐的需要使用界面、或者指令一直重复的创建项目、创建分支。帮助你通过某个时机打tags,触发gitci
等。
使用GitLab Open Api
我前几年使用的是
gitlab
这个npm包, 能减化使用方式,现在已经废弃,现在使用@gitbeaker/rest
, 用法基本一致。@gitbeaker/rest
对Node 版本要求较高 v18+。
基本示例:
import { Gitlab } from '@gitbeaker/rest';
const api = new Gitlab({
host: 'http://example.com',
token: 'personaltoken',
});
// Listing users
let users = await api.Users.all();
// Or using Promise-Then notation
api.Projects.all().then((projects) => {
console.log(projects);
});
- host 就是你的gitlab服务;
- token 可以通过点击头像,选择
Edit profile
,在选择Access Tokens
,填入token name
,等信息然后点击Create personal access token
生产token。
由于我本机的node
环境没有那么高,就不再麻烦使用@gitbeaker/rest
,我下面就使用gitlab
这个npm包一步一步带你实现如何使用起来开放api。
首先呢,咱们简单搭建一个node
服务环境,如下:
// app.js
const Koa = require('koa')
const app = new Koa()
const router = require('./router/routes') // 在下面
const koaLogger = require('koa-logger') // 输出请求日志:koa-logger
const cors = require('kcors')
const json = require('koa-json')
const bodyParser = require('koa-bodyparser') // body解析器:koa-bodyparser
app.use(cors({ credentials: true })) //允许跨域,并且允许附带cookie
app.use(koaLogger())
app.use(bodyParser());
app.use(json())
// 加载路由
router(app)
app.listen(5000, () => {
console.log(`server is running at http://localhost:${5000}`)
})
router.js
// router.js
const Router = require('koa-router')
const gitCtrl = require('../controller/git-controller')
module.exports = app => {
const router = new Router()
const apiRouter = new Router()
router.get('/', async (ctx, next) => {
ctx.type = 'text/html'
ctx.body = `<h1>这里是Koa首页</h1>`
})
apiRouter.get('/projectList', gitCtrl.getProjectList) // 获取项目列表
apiRouter.get('/branches/:id', gitCtrl.getBranches) // 获取分支
apiRouter.get('/tags/:id', gitCtrl.getTags) // 获取tags
apiRouter.post('/project/add', gitCtrl.createProject) // 创建项目
apiRouter.post('/group/add', gitCtrl.createGroup) // 创建组
//设定api路由为router的子路由
router.use('/api', apiRouter.routes(), apiRouter.allowedMethods())
//如果匹配不到路由则返回404
router.all('/*', async (ctx, next) => {
ctx.response.status = 404;
ctx.response.body = `<h1>page not found!</h1>`
})
app.use(router.routes()).use(router.allowedMethods())
}
上面定义了几个api接口: 获取项目列表(/api/projectList Get)
,获取分支(/api//branches/1111 Get)
,获取tags(/api//tags/1111 Get)
,创建项目(/api/project/add Post)
,创建仓库组(/api/group/add Post)
几个使用GitLab Open Api
的示例带着大家学习。
controller
// controller
const gitService = require('../service/git-service')
const result = {
error(msg, data) {
return data ? { code: 100, msg: msg, data: data } : { code: 100, msg: msg }
},
success(msg, data) {
return { code: 200, msg: msg, data: data }
}
}
module.exports = {
getBranches: async (ctx) => {
const { id } = ctx.params
const models = await gitService.getBranches(id)
ctx.body = result.success('获取成功', models)
},
getTags: async (ctx) => {
const { id } = ctx.params
const models = await gitService.getTags(id)
ctx.body = result.success('获取成功', models)
},
getProjectList: async (ctx) => {
const { id } = ctx.params
const models = await gitService.getProjectList(id)
ctx.body = result.success('获取成功', models)
},
createProject: async (ctx) => {
const { id } = ctx.params
const models = await gitService.createProject(id)
ctx.body = result.success('获取成功', models)
},
createGroup: async (ctx) => {
const { id } = ctx.params
const models = await gitService.createGroup(id)
ctx.body = result.success('获取成功', models)
},
}
service
// service
const gitModels = require('../models/git.js')
module.exports = {
getProjectList: async(id) => {
const res = await gitModels.getProjectList(id)
return res
},
getBranches: async (id) => {
try {
let res
res = await gitModels.getProjectBranches(id)
return res
} catch (error) {
return error
}
},
getTags: async (id) => {
try {
let res
res = await gitModels.getProjectTags(id)
return res
} catch (error) {
return error
}
},
createProject() {
},
createGroup() {
},
}
models
层关键会在这个里面调用git
开放接口接口达到创建项目等相关操作
const { Gitlab } = require('gitlab');
const api = new Gitlab({
host: 'http://example.com',
token: 'personaltoken', // **token 可以通过点击头像,选择`Edit profile`,在选择`Access Tokens`,填入`token name`,等信息然后点击`Create personal access token`生产token。**
});
/**
* 获取项目信息
* @param {*} projectName
*/
const getProjectInfo = async function (projectName) {
// 模糊查找项
const res = await api.Projects.search(projectName);
return res
}
const getGroupProjectList = async function (id) {
const res = await api.Groups.all({ id: id });
return res
}
const getGroupProject = async function (groupId) {
const res = await api.GroupProjects.all(groupId);
return res
}
/**
* 根据项目名称获取分支列表
* @param {*} projectName
*/
const getProjectBranches = async function (projectId) {
const res = await api.Branches.all(projectId)
return res
}
/**
* 根据项目名称获取分支tags列表
* @param {*} projectName
*/
const getProjectTags = async function (projectId) {
const res = await api.Tags.all(projectId)
return res
}
/**
* name:项目名称
* path:项目路径
* description: 项目介绍
* namespace_id: 群组ID
* @param {*} params
*/
const createProject = async function (params) {
try {
const res = await api.Projects.create(params);
return res
} catch (error) {
return error
}
}
/**
*
* @param {*} params
* Attribute Type Required Description
* id integer yes ID or URL-encoded path of the project owned by the authenticated user.
* branch string yes Name of the branch.
* ref string yes Branch name or commit SHA to create branch from.
*/
const createBranches = async function (params) {
try {
const res = await api.Branches.create(params);
return res
} catch (error) {
return error
}
}
/**
* name:组名称
* path:组路径
* description: 组介绍
* namespace_id: 群组ID
* @param {*} params
*/
const createGroup = async function (params) {
try {
const res = await api.Groups.create(params);
return res
} catch (error) {
return error
}
}
module.exports = {
getProjectInfo,
getGroupProjectList,
getGroupProject,
getProjectBranches,
getProjectTags,
createProject,
createGroup,
createBranches,
}
然后使用nodemon
运行,再你得package.json
增加:
{
"name": "gitlab-api-test",
"version": "0.0.1",
"main": "index.js",
"scripts": {
"dev": "nodemon -w src src/app.js"
},
"description": "Gitlab Open Api Test",
"dependencies": {
"gitlab": "^14.2.2",
"kcors": "^2.2.2",
"koa": "^2.13.0",
"koa-body": "^4.2.0",
"koa-bodyparser": "^4.3.0",
"koa-json": "^2.0.2",
"koa-logger": "^3.2.1",
"koa-router": "^9.1.0",
"koa-static": "^5.0.0",
"lodash": "^4.17.15",
"path": "^0.12.7",
"shelljs": "^0.8.4"
},
"devDependencies": {
"nodemon": "^2.0.4"
}
}
可以看到使用起来还是蛮简单的,关键点在于再初次使用gitlab
没有明确的文档告诉你,那个方法是创建、新增、查找、删除,不知道要传什么参数。但是由于这个插件是TS
编写的,可以再编码中看到以下图提示,至于传参由于也是ts写的咱们可以看到。 如果你对ts
比较陌生,也没关系,可以去 gitlab官网openapi整体预览 、gitlab官网openapi使用文档中查看,参数名都是保持一致的。
官网部分使用截图:
还有你可能会疑惑ID是啥怎么传如下图:
结语
以上就是使用
Gitlab Open Api
相关的使用总结,如果对您有帮助,欢迎点赞收藏关注。可以在评论区说下你们的GitLab Open Api
使用场景。
转载自:https://juejin.cn/post/7257520279300177979