前言
最近在使用GitLab CI/CD时发现一个使用“不太顺畅”的使用场景。具体是这样的:
作为一名开发者,有时需要同时负责几个前端项目的部署
修复a项目的bug后需要部署到测试环境,
修复b项目的bug后需要部署到测试环境。
。。。。
由于各种原因,这种场景的部署并非是自动部署的,需要负责人去手动创建部署流水线。比如为了给测试人员提供一个可靠,稳定的的测试环境,会采用手动部署环境。
这就导致一个问题,我需要先进入A项目,点击流水线,选择对应分支,创建一个流水线。
然后再进入B项目,重复以上操作。
过程是比较繁琐的,之所以会这样,是因为GitLab没有提供一种个人Ower项目的流水线管理。
类似下图 国产devops工具 建木的这种:
由于没有个人视角下的流水线管理,这就需要我们创建某个项目的流水线就必须进入项目内部。(或许在不久的将来,会有这样一个功能)。
这个问题的解决方案很简单,使用GitLab OpenAPI来实现流水线的管理,包括根据项目查询流水线,新建或重新运行流水线。但不管要写一些页面,还需要做一下后端发送请求查询GitLab数据的代码。
具体思路是很简单的,无奈本人业余时间实在不多,于是搁置了,直到有一天我突发奇想,能否用Node-RED这一低代码工具来实现这一全局流水的管理功能。
Node-RED是一个IBM开源的物联网项目。它是一个基于流的构建在Nodejs上的低代码事件驱动应用。
利用它丰富的节点我们可以做很多很多事情。
可以使用它的HTTP节点来发送HTTP请求,查询项目信息,流水线列表,或触发一条项目的流水线。
可以使用它的dashboard节点来提供页面面板功能。
在整个开发过程中你只需要配置一些必要参数即可,编写极少部分的JS代码,其他的数据流水流转,逻辑处理都交给Node-RED。
说干就干,下面就开始使用Node-RED与GitLab OpenAPI来实现DevOps 流水线管理
目标
初步分析,该功能主要包括以下四个核心功能:
- 查询个人Owner项目列表
- 根据项目查询项目下的分支列表
- 查询项目流水线并展示
- 新建流水线
- 重新触发流水线
开始前的准备
安装Node-RED
这里推荐Docker安装Node-RED,比较简单
docker run -it -p 1880:1880 --name mynodered nodered/node-red
浏览器访问 http://127.0.0.1:1880/ 即可体验。这里不过多介绍,感兴趣的可以移步我的Node-RED专栏
Node-RED 编辑器操作页面
其他安装方式可以查看该地址 https://nodered.org/docs/getting-started/
创建Token
由于我们要查询个人视角下的资源,所以创建一个Personal Access Tokens
如下图
创建后,记得保存起来,以为你和他只有一面之缘。
要使用的API
查询个人项目的API,需要携带?owned=true
。表明只查询当前用户Owner的项目。
GET /projects
查询项目流水线的API
GET /projects/:id/pipelines
新建流水线(除了项目id,还需要必传参数ref 分支或tag)
POST /projects/:id/pipeline
重新触发流水线
POST /projects/:id/pipelines/:pipeline_id/retry
实践
我们将接口的基本地址与token保存为流变量,在整个流中都可以访问到。
然后在流运行后,先请求项目列表,传递给 dropdown
节点,在新的页面上显示。
当用户选中项目后,请求项目分支列表,传递给另一个 dropdown
节点,并显示在页面上。
当用户选中分支后,请求该分支下的流水线,并使用table
节点显示到页面上。
当用户单击流水线表格中的某一行时,会重新运行该流水线。成功后会有通知
最后点击create pipeline
按钮后,会使用当前选中的项目与分支来创建一条新的流水线,成功后会有通知。
最终完整的流逻辑图是这样的
流程操作完整动态图
Node-RED支持将流数据导出,保存为JSON数据,该流程创建后,想要分享,分发,会变得非常容易,导出JSON数据,配置域名和token即可。有需要流文件的同学请在文章下留言。
总结
创造让工作更简单。希望对你有用。