【框架】环境切换集成封装
前提:
在公司里可能会存在多套环境,每个环境对应项目的数据库、redis、域名、用户等等都不太一样,尽管我们有配置文件,但是手动改起来也是很麻烦,我们希望能够在框架里执行时,只需要指定环境名称即可,他们能够自动将各个环境配置信息切换到当前执行中来针对各个环境编写配置文件比如公司有sit环境,dev环境、test环境等,针对这些环境分别使用sit/uat/dev等来命名,分别在config目录下创建他们几个的环境配置文件,文件名称命名规则env_xxx.yaml
env_test.yaml
思路
前提:配置相关的信息,这里以yaml文件存储,如下(也可以放到一个文件,随便,这里是分开的,当然你也可以用其他文件类型)
common.yaml- 存储账号一些信息
host.yaml- 存储环境ip和端口号等信息
redis.yaml-存储redis等相关信息
…等等
此时新建一个中间文件,存储不同环境的信息,包含上述内容,比如:
env_test.yaml
common:
buyerName:
- 13xx
- 13xx
buyerPassword:
- xxx
- xxx
managerName: xx
managerPassword: xx
sellerName: xx
sellerPassword: xx
http:
buyer: http://xx:7002
seller: http://xx:7003
manager: http://xx:7004
首先根据终端输入的环境(test、uat等),通过sys.argv 读取环境参数后,拼接路径env_{test}.yaml,读取文件内容后,分别写入common、host等yaml文件中
环境信息传递的设计和封装
1.执行时如何指定环境名称
整体框架执行入口是run.py,那么run.py在未来我们做持续集成时肯定是通过命令行执行的方式去进行的
python run.py
那么注意在python里命令行执行脚本时我们是可以给脚本传递外来参数的,所以我们的设计时把环境名称作为run.py的外来参数
python run.py test
python run.py dev
上面指定后,如何接收呢
2.代码封装
1.通过sys.args得到命令行传递的环境名称
2.根据得到的环境名称,拼接该环境对应的配置文件名称路径,config/env_test.yml
3.读取该环境配置文件中的所有信息
4.分别将环境中的common写入common.yml,将http写入http.yml等
yaml写入:dump()方法