案例
这次就不上代码了。情况是这样的,我们某一新产品,采用微服务架构,每个微服务独立的源码仓:
- 每个服务都要支持手工安装,DF部署,容器部署。
- 每个服务都要支持修改密钥,密码等。
- 每个服务都要支持容灾,WatchDog等
上面的功能实现都需要采用Shell脚本,当搞定一个服务时,只需要复制到其它的服务,是最为常见的做法。但这种做法也带来了大量的重复,导致维护极其困难。真是拷贝一时爽,维护成了火葬场。主要问题表现:
- 服务内重复: 同一服务内脚本不同场景下复制粘贴,如手工安装与DF部署,都需要创建OS用户,没有抽取公共函数复用
- 服务间重复: 不同服务间脚本复制粘贴,如同样是修改密码,只是配置文件路径不一样,配置项略有差别,没有抽取公共脚本复用。
- 缺少封装性: 部分脚本从头到尾没有任何函数提取,大块脚本从顶写到尾,全局变量到处飞,阅读极其困难。
- 健壮性不足: 脚本中的操作没有判断返回值或退出状态码,脚本没有太多的可靠性的防护。