写在前面:公司代码发布体系总结

本人是测试人员,包括我在内,团队中有2名测试,整个研发不含测试大概10名(后台前端)。除了负责测试工作,还兼任负责发布公司测试环境及生产环境的代码。

代码环境及架构

公司所属行业为微信电商,使用java流行的MVC框架(这个我还不是很懂,不知道用了Spring哪些东西),这个了解过,只是并不深入,可以参考我的另一篇入门摘抄的java web基础。言归正传:
后台编程语言:java、UI框架kendo ui
web容器:tomcat
微信端:js、html、vue、css、jsp等
代码管理:git
构建工具:maven
部署操作系统:CentOS7
数据库:MySQL
其他数据库或工具:Redis、Memche、RPC、activemq、阿里云sso
桌面开发工具:eclipse

代码发布的主要流程

Created with Raphaël 2.1.0 研发编码/修改 发版到测试环境 测试确认 发版到生产环境 yes no

流程中两次发版目前都是执行我手动写的脚本。

Created with Raphaël 2.1.0 发版需求 git pull代码 maven编译构建 发布代码到tomcat 重启tomcat 开始测试

当然git由于有分支管理,发布的代码需要根据实际情况进行切换。这里git的分支管理就不再赘述。

由于手工发版实属重复劳动,后来约定定时测试环境每日定时发版2次,一次是中午12点10分,一次是晚上7点30.使用Linux的crontab。解放后的双手就是生产力。

1
2
3
crontab -e #编辑任务,进入文本编辑窗口,输入以下内容。两个脚本分别是拉取代/构建maven项目和发版代码用
10 12 * * 1-5 bash ~/mvn.sh && bash ~/updateSites.sh
30 19 * * 1-5 bash ~/mvn.sh && bash ~/updateSites.sh

PS:此处有坑一个,mvn.sh和updateSites.sh中存在git和mvn这两个非系统自带命令,使用crontab定时运行会缺乏环境变量,导致不能执行。解决办法:在脚本中添加:source /etc/profile。

生产环境的代码严格执行测试环境的代码为基准,所以发布的代码直接从tomcat的webent下面打包,唯一的不同是执行打包的时候会讲配置文件替换为生产。配置文件在代码库中做了统一的管理。
Created with Raphaël 2.1.0 发起发版任务 配置文件check 配置文件替换 代码打包 sftp方式拉取代码包 备份源代码发布代码包 发布代码包 上线回归测试

环境搭建

这简单。
sudo apt-get install git

网上教程多,此处略。

这个也简单,取apache官网下载,按照通常的maven安装教程安装部署即可。
难的地方:maven在执行构建过程中可能遇到pom.xml的配置不正确,导致编译不通过。笔者在初次接触maven的时候并不清楚我们自己的代码具体结构是怎么样的,后来熟悉后知道,maven构建主要有两部分:基础通用的被其他webent依赖调用的先编译,webent单独编译。这里省略若干艰辛的探索过程。。。
PS:小技巧,maven的repository可以把本地windows的repository上传到~/.m2目录下,省的再编译下载(我们的有1G大)

sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的一部份,是一种传输档案至 Blogger 伺服器的安全方式。

简单说:客户机生成秘钥2个,一个是私钥,一个是公钥。公钥用于分发需要登录的服务器,公钥(对称公钥)方法解决了每次都输入密码的问题:使用客户端生成密钥钥对,将公钥添加到服务器的信任公钥表中,即完成了服务器对客户端信任的添加,再次使用SCP或者SFTP则不需要密码。。具体操作参考百度经验