这次就走到软件的最后一站,哈哈,就是把软件给发布部署到服务器上。其实在部署的过程中,尤其现在微服务架构的盛行,软件本身喜欢用什么敏捷开发,导致持续发布的困难也是相当的大,原来不管项目怎么整,只要最后把项目部署好,可以正常的访问这个项目就部署好了。但是一旦把项目拆的很散,拆的很多个服务的时候,这时候想部署起来真的不是一个简单的事情。需要使用科学的方法和经验把这个事情搞定。
尤其现在很多领导都喜欢敏捷开发,敏捷开发就导致本来要一个星期开发的功能,他给你说2天。为什么要2天,敏捷开发就是快,敏捷开发本身就是有问题的。
•① 现在很多公司是如何发布的。多久发布一次。
身边的几种情况
1.自己打包,给领导一说就直接发布了。领导说什么时候上就什么时候发布。2.告诉运维人员项目git的位置,通知运维上线运维拉取,运维人员发布到生产环境。(如果项目几百,几十个,告诉运维,运维需要多大体积的团队啊) 3.每天都有小更新,每天都在发布。4.项目发布用了jenkins工具,通过它进行自动化的构建发布。
•② 说说身边的发布中存在的问题
1.本来问题没有的,参数写错了。2.依赖的项目没有发布,自己先发布了 3.依赖版本的项目本身不在本次发布,结果自身项目依赖那个项目的功能 4.运维人员把测试环境的代码发布到生产环境了
•③ 回滚导致的事故
回滚,一般很难做到如果单纯是代码级别的还好说,直接备份回滚到上一次就可以了,如果涉及到刷数据库是不是就尴尬了,新版本的数据都刷过了,但是代码回滚了,是不是要把数据在重新刷回到未刷的状态。可能你刷过去的脚本有,但是刷回来的脚本可能就没有了。这就是事故了。
要把一个项目,尤其大规模的项目,大型互联网项目都是拆的很散的,几十个上百个,那些项目都是拆的很散的,他们之前还有项目依赖,他们发布起来真的是很难的事情。
•④ 软件发布其实是个非常非常困难的事情,非常考验管理人员的水平,如何全局把控,如何顺序执行。
随着敏捷开发模式和微服务的盛行,导致软件集成难度变大,持续部署变得困难,如何减少发布导致的事故,缩短交互周期,做到可持续部署!其实这也是世界难题,太难了,只能根据自身业务本来来进行设定,不求最新最好,只求最适合自己的。
•⑤ 软件的开发阶段
正确的软件开发的阶段:编码 > 构建 > 集成 >测试 > 交付 >部署 可持续的集成> 可持续的部署 > 可持续的发布
•⑥ 持续集成 (INTEGRATE)
集成:如果是单体开发的话,就没有集成这一说,所有的功能都在一个项目,在软件开发过程中都已经集成好了,相当于都已经集成好了。现在越来越流行的是一个功能并不是由一个项目来开发的,比如一个交易中心双11的时候,提交购物信息的时候,可能依赖库存中心,商品中心,支付中心,会员中心,通知中心。开发提交订单这一个功能,后面依赖了一大堆的系统,加入修改提交订单这一个小bug,可能影响到N多个项目都需要修改。极有可能你部署提交订单这个项目,其他N多个项目都需要同步进行部署。
官方解释:软件个人研发部分向软件整体部分交付,频繁的进行集成以便更快的发现其中的错误。
•⑦ 持续交互(DELIVER)
交互:类似线上的预演环境,其实有时候称之为灰度环境,及时我们测试我们也需要在预演环境先走一遍,有的功能要求没有这么严格可能就直接测试了没有预演环境,更多的公司可能直接build后就deploy了。
官方解释:在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境
•⑧ 持续集成,持续交互面临的最大的问题
协调和写作的问题 依赖的包,依赖的项目说好的要在同一时间一起上线的,结果不知道什么原因,它就掉链子,自身的项目不能如期发布,但是自身的项目可能依赖另一个功能可能需要的接口,导致另外的接口也无法发布,就形成了一个链条,一个功能不能如期,导致其他所有的都无法如期。都崩溃。
1.最大的问题就是协调,协作的问题 2.如果当时约定了,是否考虑应急方案,提前告知无法提供,
•⑨ 顺利的可持续化集成需要做到以下几点
1.一个清晰的可执行的发布流程 2.一个熟悉该流程的发布管理协调人员(这种人必须擅长多线程处理问题) 3.有效的沟通和反馈机制(confluence做信息反馈) 4.可持续化集成工具(jenkins) 5.版本管理工具(并不单指代码的管理工具,日常发布的程序文件SVN)
•① 信息协调工具(confluence)
1.月度发布计划(比较粗) 2.周发布计划(产品经理,提交本次日常要发布功能) 3.测试人员提交具体的发布窗口计划文档(开发人员编写本次自身负责的系统,及依赖关系和脚本checklist,可以上线前截止某个时间可以修改,可以共同编写文档) 4.线上事故报告单(bug修复计划)
•② 版本管理工具(发布文件,不是代码级别的)
git(git步骤繁琐,需要add,commit,push) nexus ftp(共享文件)最简单的方式。svn
•③ onfluence
介绍:Confluence是一个专业的企业知识管理与协同软件,也可以用于构建企业wiki。使用简单,但它强大的编辑和站点管理特征能够帮助团队成员之间共享信息、文档协作、集体讨论,信息推送。也可以作为公司内部的团队协作软件,在线编辑word,execel,ppt等。这个功能与腾讯的在线编辑word,execel类似。但是它的功能更强大。源码:https://github.com/limingios/netFuture/tree/master/confluence
官网: https://www.atlassian.com/software/confluence/download-archives 不建议使用最新的,本身这个软件是收费的,我建议大家下载 5.6.6,为什么呢,因为可以破解 嘿嘿
环境准备 1.CentOS 7 2.java jdk 1.8 3.mysql-server 5.6 4.confluence 6.9.1
•④ 服务信息
通过vagrant 生成虚拟机
系统类型 | IP地址 | 节点角色 | CPU | Memory | Hostname |
---|---|---|---|---|---|
Centos7 | 192.168.68.100 | confluence | 2 | 4G | confluence |
•⑤ jdk 安装
必须安装jdk8
•⑥ mysql 安装
confluence是可以使用内嵌数据库的额,但是作为生产环境的话,confluence是建议使用自己的数据库的, 在安装数据库的时候是支持多种的数据库的,我这里用的是mysql,版本5.6/5.7都可以。还有需要连接mysql的jar包mysql-connector。
首先是配置文件/etc/my.cnf,在[mysqld]标签下添加
最后是重启mysqld,并登陆mysqld查看字符集,创建数据库的时候设置的密码是:1qaz@WSX
为Confluence创建对应的数据库、用户名和密码
•⑦ 安装Confluence
https://blog.csdn.net/weixin_41004350/article/details/80590421
进入浏览器访问,如果是英文可以选择语言中文,选择【产品安装
先不要选择任何插件
记录服务器ID (B5BE-SJ3C-N42I-XCN0)
提取破解文件,关闭Confluence
破解文件,源码里面有。
然后本地window电脑操作:① 打开下载的破解工具,运行confluence_keygen.jar ②将记录的server ID填入,Name随便填。③点击gen, 生成key并记录。④点击patch,选择刚下传到本地的atlassian-extras-2.4.jar文件进行破解。⑤不要关闭破解工具,过会需复制key里面的密钥
OK,破解完成后,将破解后的文件传回服务器
Confluence本身是没有集成mysql驱动的,需要自己下载并上传,原本在你安装的时候,输入key之后,会需要填入mysql连接信息,那里会有链接指向官方文档,教你如何配置mysql。但是配置完成后需要重启,会导致前面的破解出问题,所以,这里要一起完成后再重新启动。官方教程文档地址如下:https://confluence.atlassian.com/doc/database-setup-for-mysql-128747.html 源码中包括:mysql的驱动 解压后把mysql-connector-java-5.1.46-bin.jar传到服务器上,放到confluence的类目录下:
•⑧ 上述操作完成后,重启完成重启confluence,
想不花钱确定麻烦没办法
回到输入key的界面,输入上面记录的key【之前说了别关闭破解软件】,点击下一步
选择我自己的数据库
OK,到此安装完成。关于Confluence的使用,http://www.confluence.cn/pages/viewpage.action?pageId=360467,界面描述是不是就是软件开发使用的,很高大上啊。非常贴合软件开发流程文档的思路。
•⑨ SVN安装
1.通过yum命令安装svnserve
2.创建版本库目录(此仅为目录,为后面创建版本库提供存放位置)
3.创建版本库目录
4.配置svn
authz:负责账号权限的管理,控制账号是否读写权限 passwd:负责账号和密码的用户名单管理 svnserve.conf:svn服务器配置文件
编辑 authz 文件 [/]:表示根目录,即 /var/svnrepos admin = rw:表示用户luo对根目录具有读写权限。
编辑 passwd 文件
编辑 svnserve.conf 文件(注意:配置的前面不能有空格,一定要顶格写) anon-access = none:表示禁止匿名用户访问。auth-access = write:表示授权用户拥有读写权限。password-db = passswd:指定用户名口令文件,即 passwd 文件。authz-db = authz:指定权限配置文件,即 authz 文件。realm = /var/svnrepos:指定认证域,即 /var/svnrepos 目录。
PS:本次主要说了项目管理中存在的问题和如何解决,另外说了confluence 和 svn的安装,很不错的软件,confluence说了一些黑科技破解的方案。