基础建设/业务/使用gitlabApi获取远程仓库的文件内容

1,323 阅读1分钟

背景

每次更新脚手架都需要人力进行通知用户,想让用户能够感知到npm包需要更新。 虽然脚手架是使用了npm包的形式新建的,但是包地址存放在公司的gitlab上,故不支持npm的版本检测。

解决

第一种,使用服务端提供接口支持

这种方案需要占用到服务资源,故此放弃。

第二种,通过读取gitlab文件内容进行判断

思路:

graph TD
执行任意指令 --> 脚手架
脚手架 -.读取gitlabApi上的json文件与本地的json文件对比.-> 判断是否需要更新{判断是否需要更新}
判断是否需要更新 -.不需要.-> 结束
判断是否需要更新 -.需要.-> 询问用户是否更新{询问用户是否更新}
询问用户是否更新 -.不需要.-> 结束
询问用户是否更新 -.需要.-> 执行脚手架更新
执行脚手架更新 --> 结束

获取gitlab文件内容的方法

通过查阅api文档,可以知道,如果要获取gitlab上的文件内容需要用到如下几个参数

image.png 取文件内容的api文档

1、id的获取

点击进入gitlab所在的项目,这个就是项目id image.png

2、file_path的获取

点击你要读取的项目文件最后的文件路径。 image.png

3、ref的获取

指的是你要读取哪个分支的文件

4、your_access_token

个人的token,可通过如下获取

image.png

5、gitlab.example.com的获取

这个是你公司的访问gitlba的域名。每个公司都不一样。访问gitlab后直接复制域名即可。

6、发送请求

// 获取gitlab文件内容 https://docs.gitlab.com/ee/api/repository_files.html
export function httpGetFileContent(fileContent: any): Promise<any> {
    let ref = 'master';
    return instance.request({
        url: `api/v4/projects/${fileContent.id}/repository/files/${fileContent.file_path}`,
        method: 'GET', // default
        params: { ref },
        headers: {
            'PRIVATE-TOKEN': fileContent.priavte_token,
        }
    })
}

httpGetFileContent({
    id: 6666,
    priavte_token: TheToken.priavte_token,
    file_path:encodeURI('package.json')
}).then((res)=>{
    let contentBase64 = Buffer.from(res.data.content,'base64'); // 文件内容返回的是base64 需要进行转换成字符串
    console.log(contentBase64.toString('utf-8')); // 转换成字符串
}).catch((res)=>{
    console.error(res);
})

参考资料

  1. GitLabApi获取远程仓库中的文件内容
  2. gitlabApi文档