http://blog.7rule.com/2018/03/15/rigger.html
缘起
开发多年,我自己积累了一些个人认为还不错的工具、框架,今天我先介绍一个我自己开发的工具,主要用于团队多人合作开发时使用。
遇到的问题
我们在多人合作开发一个项目时,通常会遇到如下几个方面的问题:
项目中有一些配置文件,如开发web项目时会用到nginx配置,项目中依赖db时要有db配置。
多人合用一台开发机,所以如nginx配置中的server_name、资源配置中如go服务启动的tcp端口等不能相同。
当配置文件变化后,需要项目中所有人都更新自己相应的配置文件。
新同学加入项目后,通常要看之前同学写过的项目部署文档去尝试部署项目,其中会遇到没有文档或是文档更新不及时的问题,这样就只能靠问,就算是能力强一些的同学,自己解决起来也要花很长时间,更重要的是,这些都是重复性工作。
解决思路
针对上面提出的问题,我的解决思路如下:
每个人使用来定义自己和别人环境上的不同之处。
使用多个统一的来生成个人最终的配置文件,当多人协作使用的配置有更新时更新相应的模板文件即可。
项目环境搭建步骤记录到统一的配置文件中,简单快速执行整个项目搭建过程。
Rigger项目
基于上面的思路,我开发了这个工具。
Rigger项目地址:https://github.com/ligang1109/rigger
里面有相关使用文档,大家有兴趣的不妨看下。
实际效果
这里使用我们开发的一个golang开源项目:gobox-demo为例。
项目开发环境部署方法
参与这个项目开发的同学,如果想要把自己的环境跑起来,需要做如下的事情:
创建自己的项目资源配置文件:,并在相应目录下创建link:
创建自己的nginx配置文件,并在相应目录下创建link:
初始化目录:logs、tmp
获取项目所依赖的包
重启nginx
做完上面这些事情,这个项目就完成了我们在开发环境的部署。
使用Rigger部署项目开发环境
我们看下如何使用Rigger完成上面这些事情:
定义用户变量
首先,我们将每个人和自己不同的地方使用变量进行定义,这个通过编辑Rigger配置文件中的完成。
var.json示例:https://github.com/goinbox/gobox-demo/blob/master/conf/rigger/var.json
编辑模板文件
定义好变量后,我们就可以编辑项目中用到的相关的配置模板文件了。
因为配置都是可以模板化的,那么其中每个用户和别人不同的地方,使用之前定义好的变量做替换就可以了。
资源配置文件示例:https://github.com/goinbox/gobox-demo/blob/master/conf/rigger/tpl/tpl_server_conf_rewrite.json
nginx配置文件示例:https://github.com/goinbox/gobox-demo/blob/master/conf/rigger/tpl/tpl_api_http.conf.ngx
大家可以看到,每个人不同的地方,都使用变量这种方式做了替换。
定义模板文件的解析规则
定义好模版后,我们就可以定义使用哪个模板文件生成哪些对应的配置文件了,这个通过编辑Rigger配置文件中的完成。
tpl.json示例:https://github.com/goinbox/gobox-demo/blob/master/conf/rigger/tpl.json
定义需要执行的外部命令
最后要定义的就是我们还需要执行哪些外部命令了,比如创建哪些目录,拉取项目依赖的第三方包,重启nginx等。这个通过编辑Rigger配置文件中的完成。
action.json示例:https://github.com/goinbox/gobox-demo/blob/master/conf/rigger/action.json
运行rigger
完成上面这些工作,我们就可以运行rigger,它就可以帮我将这个项目部署好了。
运行示例:https://github.com/goinbox/gobox-demo/blob/master/init.sh
这样做的好处
上面这些步骤,看起来很多,但其实不然。
因为大家平时开发的项目都很类似,只要你在一个项目中写好了对应的配置及模板,在另外一个项目中仅需要做很少的改动即可,且这是项目新创建时的一次性工作。
在实际项目中使用Rigger后,我们从中获得的好处如下:
配置更新时仅需要更新对应的模板文件,其他同学更新模板文件后只要执行rigger命令即可更新自己的环境。
大大减少了项目环境部署的文档工作。
大大降低新同学加入项目的成本。
团队开发效率得到极大提升。
结束语
看了这么多,你有没有兴趣试试看?
如果使用中有遇到问题,或是有想帮助改进Rigger,都可以联系我,欢迎大家指正,谢谢!
Rigger项目:https://github.com/ligang1109/rigger
领取专属 10元无门槛券
私享最新 技术干货