zoukankan      html  css  js  c++  java
  • 写在前面:公司代码发布体系总结

    本人是测试人员,包括我在内,团队中有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研发编码/修改发版到测试环境测试确认发版到生产环境yesno

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

    测试环境发版流程

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

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

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

    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方式拉取代码包备份源代码发布代码包发布代码包上线回归测试

    环境搭建

    Linux环境下git安装

    这简单。
    sudo apt-get install git

    JDK安装

    网上教程多,此处略。

    Linux环境下maven构建环境搭建

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

    Linux不同服务器之间ssh和sftp免密登陆

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

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

  • 相关阅读:
    U盘出现大量乱码文件,并且不能彻底删除
    使用命令生成配置文件
    input只读属性readonly和disabled的区别
    将sublime添加到鼠标右键
    mysql-front导入数据失败:“在多字节的目标代码页中,没有此 Unicode 字符可以映射到的字符”
    typeof运算符
    react input 设置默认值
    时间格式转换
    去除字符串首尾空格
    ES6基础知识汇总
  • 原文地址:https://www.cnblogs.com/windanchaos/p/6398812.html
Copyright © 2011-2022 走看看