03月15, 2018

团队开发项目环境搭建工具Rigger

缘起

开发多年,我自己积累了一些个人认为还不错的工具、框架,今天我先介绍一个我自己开发的工具,主要用于团队多人合作开发时使用。

遇到的问题

我们在多人合作开发一个项目时,通常会遇到如下几个方面的问题:

  1. 项目中有一些配置文件,如开发web项目时会用到nginx配置,项目中依赖db时要有db配置。
  2. 多人合用一台开发机,所以如nginx配置中的server_name、资源配置中如go服务启动的tcp端口等不能相同。
  3. 当配置文件变化后,需要项目中所有人都更新自己相应的配置文件。
  4. 新同学加入项目后,通常要看之前同学写过的项目部署文档去尝试部署项目,其中会遇到没有文档或是文档更新不及时的问题,这样就只能靠问,就算是能力强一些的同学,自己解决起来也要花很长时间,更重要的是,这些都是重复性工作。

解决思路

针对上面提出的问题,我的解决思路如下:

  1. 每个人使用变量来定义自己和别人环境上的不同之处。
  2. 使用多个统一的模板文件来生成个人最终的配置文件,当多人协作使用的配置有更新时更新相应的模板文件即可。
  3. 项目环境搭建步骤记录到统一的配置文件中,简单快速执行整个项目搭建过程。

Rigger项目

基于上面的思路,我开发了Rigger这个工具。

Rigger项目地址

里面有相关使用文档,大家有兴趣的不妨看下。

实际效果

这里使用我们开发的一个golang开源项目:gobox-demo为例。

项目开发环境部署方法

参与这个项目开发的同学,如果想要把自己的环境跑起来,需要做如下的事情:

  1. 创建自己的项目资源配置文件:ligang_server_conf_rewrite.json,并在相应目录下创建link:server_conf_rewrite.json -> /home/ligang/devspace/gobox-demo/conf/server/ligang_server_conf_rewrite.json
  2. 创建自己的nginx配置文件ligang_api_http.conf.ngx,并在相应目录下创建link:ligang.gdemo.com.conf -> /home/ligang/devspace/gobox-demo/conf/http/ligang_api_http.conf.ngx
  3. 初始化目录:logs、tmp
  4. 获取项目所依赖的包
  5. 重启nginx

做完上面这些事情,这个项目就完成了我们在开发环境的部署。

使用Rigger部署项目开发环境

我们看下如何使用Rigger完成上面这些事情:

定义用户变量

首先,我们将每个人和自己不同的地方使用变量进行定义,这个通过编辑Rigger配置文件中的var.json完成。

var.json示例

编辑模板文件

定义好变量后,我们就可以编辑项目中用到的相关的配置模板文件了。

因为配置都是可以模板化的,那么其中每个用户和别人不同的地方,使用之前定义好的变量做替换就可以了。

资源配置文件示例

nginx配置文件示例

大家可以看到,每个人不同的地方,都使用变量这种方式做了替换。

定义模板文件的解析规则

定义好模版后,我们就可以定义使用哪个模板文件生成哪些对应的配置文件了,这个通过编辑Rigger配置文件中的tpl.json完成。

tpl.json示例

定义需要执行的外部命令

最后要定义的就是我们还需要执行哪些外部命令了,比如创建哪些目录,拉取项目依赖的第三方包,重启nginx等。这个通过编辑Rigger配置文件中的action.json完成。

action.json示例

运行rigger

完成上面这些工作,我们就可以运行rigger,它就可以帮我将这个项目部署好了。

运行示例

这样做的好处

上面这些步骤,看起来很多,但其实不然。

因为大家平时开发的项目都很类似,只要你在一个项目中写好了对应的配置及模板,在另外一个项目中仅需要做很少的改动即可,且这是项目新创建时的一次性工作。

在实际项目中使用Rigger后,我们从中获得的好处如下:

  1. 配置更新时仅需要更新对应的模板文件,其他同学更新模板文件后只要执行rigger命令即可更新自己的环境。
  2. 大大减少了项目环境部署的文档工作。
  3. 大大降低新同学加入项目的成本。
  4. 团队开发效率得到极大提升。

结束语

看了这么多,你有没有兴趣试试看?

如果使用中有遇到问题,或是有想帮助改进Rigger,都可以联系我,欢迎大家指正,谢谢!

Rigger项目

http://blog.7rule.com/2018/03/15/rigger.html

本文链接:https://www.opsdev.cn/post/rigger.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。