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则不需要密码。​。具体操作参考百度经验

  • 相关阅读:
    -bash: fork: Cannot allocate memory 问题的处理
    Docker top 命令
    docker常见问题修复方法
    The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
    What's the difference between encoding and charset?
    hexcode of é î Latin-1 Supplement
    炉石Advanced rulebook
    炉石bug反馈
    Sidecar pattern
    SQL JOIN
  • 原文地址:https://www.cnblogs.com/windanchaos/p/6398812.html
Copyright © 2011-2022 走看看