本文介绍了为解决生产环境更新时打多个tag的繁琐问题,开发了一键打Tags工具。该工具基于React18和kdesign UI,利用Gitlab API实现自动打tag功能,包括列出项目提交记录、获取历史tag、自动生成新tag并鉴权调用API创建。创建完成后,通过云之家API通知相关人员。工具还支持一键查看项目tags、上线更新表地址等辅助功能。
背景:项目在更新生产环境时,经常需要打多个tag,打tag的过程并不是很友好,存在以下难点
1、项目较多,打tag过程繁琐且容易失误,容易输错tag名称,或者漏打tag
2、需要依赖开发,打tag的话包括前端项目和后端项目,打tag时需要前端和后端同时在场
3、打完tag需要通知测试和运维同学构建,比较麻烦
为了解决上述问题,特开发此一键打Tags工具,体验如下:
主要用到的技术栈是:React18框架,kdesign UI组件库
能实现上述功能主要是依赖于 gitlab 提供的一系列API,可以直接调用,API文档如下:__,我从中找到了以下几个api,集成到一键打tag工具中,分别是:
1、/api/v4/projects/${id}/repository/commits?ref=master GET // 获取最近提交记录
2、/api/v4/projects/${id}/repository/tags GET // 获取最近创建的tags
3、/api/v4/projects/${id}/repository/tags?tag_name=${tagName}&ref=master post // 创建新的tag
其中 id 为项目id, 项目id 通过下面的方式获取:
有了上述的API后,我们就可以设计一键打tag功能:
1、列出所有项目最后一次的提交记录,方便查看代码是否已经合并 (调用API 1)
2、获取最近一次的tag, 方便查看历史tag (调用API 2)
3、生成当天的新tag,tag规范:`tag_${year}.${month}.${day}.${count}`,如果当天未生成过tag,则从01开始,已经生成过了,则count++ (调用API 3)
4、在调用api时,需要进行鉴权,可通过令牌的方式
// 创建分支 export async function createTag(id: string, tagName: string, token: string) { return request(`{your_web_site}/api/v4/projects/${id}/repository/tags?tag_name=${tagName}&ref=master`, { data: null, method: 'POST', headers: { 'PRIVATE-TOKEN': token, }, timeout: 999999999, }) }
令牌放到 headers中,key值为:"PRIVATE-TOKEN",token可以通过以下方式获取,设置-》访问令牌-》添加一个访问令牌
5、tag创建完成后,需要通知到机器人,并@相关人员,可以调用云之家提供的API
/robot/webhook/send?yzjtype=0&yzjtoken=XXXXXXXXXXXXX
该API的获取方式如下:群管理员创建一个机器人
通过post方式调用即可
好了,一个完整的打tag工具完成了,快速部署完,就可以继续鼓捣其他好玩的东西了
你还可以加一些辅助工具在这里,比如:
1、一键打开所有的项目tags
2、一键打开上线更新表地址
3、一键通知消息
4、机器人自动播报轮值情况等
推荐阅读