这次就走到软件的最后一站,哈哈,就是把软件给发布部署到服务器上。其实在部署的过程中,尤其现在微服务架构的盛行,软件本身喜欢用什么敏捷开发,导致持续发布的困难也是相当的大,原来不管项目怎么整,只要最后把项目部署好,可以正常的访问这个项目就部署好了。但是一旦把项目拆的很散,拆的很多个服务的时候,这时候想部署起来真的不是一个简单的事情。需要使用科学的方法和经验把这个事情搞定。
大规模系统发布所面临的问题
尤其现在很多领导都喜欢敏捷开发,敏捷开发就导致本来要一个星期开发的功能,他给你说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,SVN)
-
信息协调工具(confluence)
1.月度发布计划(比较粗)
2.周发布计划(产品经理,提交本次日常要发布功能)
3.测试人员提交具体的发布窗口计划文档(开发人员编写本次自身负责的系统,及依赖关系和脚本checklist,可以上线前截止某个时间可以修改,可以共同编写文档)
4.线上事故报告单(bug修复计划) -
版本管理工具(发布文件,不是代码级别的)
git(git步骤繁琐,需要add,commit,push)
nexus
ftp(共享文件)最简单的方式。
svn
- confluence
介绍: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 |
vagrant up
su -
#密码 vagrant
vi /etc/resolv.conf
#nameserver 8.8.8.8
reboot
- jdk 安装
必须安装jdk8
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
#上边的下载比较慢,建议不通过wget的方式,本地下载后上传上去,我下载了3个多小时,当时正好想看电视剧看了几集
tar -zxvf jdk*
cd jdk*
#获取jdk目录填写到下面JAVA_HOME中
pwd
#追加环境变量
echo "export JAVA_HOME=/root/jdk1.8.0_141" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
#执行下面这个才能生效
source /etc/profile
java -version
javac -version
- mysql 安装
#下载mysql 源
wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
#安装mysql 源
yum -y install mysql57-community-release-el7-11.noarch.rpm
#安装mysql,中间会弹出是与否的选择,选择y即可,然后耐心等待吧。。。。。。。
yum install mysql-community-server
#启动mysql
systemctl start mysqld.service
#查看mysql状态
systemctl status mysqld.service
#查看初始密码
grep "password" /var/log/mysqld.log
#登录
mysql -uroot -p
#输入刚才查看的初始密码
#修改密码:我这里修改成:1qaz@WSX
ALTER USER 'root'@'localhost' IDENTIFIED BY '1qaz@WSX';
#授权远程访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '1qaz@WSX' WITH GRANT OPTION;
#刷新上边操作,就是提交操作
FLUSH PRIVILEGES;
#退出mysql控制台
exit
#设置自动启动
systemctl enable mysqld
systemctl daemon-reload
confluence是可以使用内嵌数据库的额,但是作为生产环境的话,confluence是建议使用自己的数据库的,
在安装数据库的时候是支持多种的数据库的,我这里用的是mysql,版本5.6/5.7都可以。还有需要连接mysql的jar包mysql-connector。
首先是配置文件/etc/my.cnf,在[mysqld]标签下添加
vi /etc/my.cnf
[mysqld]
character-set-server=utf8
collation-server=utf8_bin
default-storage-engine=INNODB
max_allowed_packet=256M
innodb_log_file_size=2GB
sql_mode = NO_AUTO_VALUE_ON_ZERO
transaction-isolation=READ-COMMITTED
binlog_format=row
最后是重启mysqld,并登陆mysqld查看字符集,创建数据库的时候设置的密码是:1qaz@WSX
service mysqld restart
mysql -uroot -p
mysqld [(none)]> show variables like "%character%";show variables like "%collation%";
为Confluence创建对应的数据库、用户名和密码
create database confluence default character set utf8 collate utf8_bin;
grant all on confluence.* to 'root'@'%' identified by '1qaz@WSX';
flush privileges;
- 安装Confluence
# 下载安装程序
wget https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-6.9.1-x64.bin
# 授权安装程序执行权限
chmod a+x atlassian-confluence-6.9.1-x64.bin
# 执行安装程序,进行安装:
./atlassian-confluence-6.9.1-x64.bin
[root@confluence ~]# chmod a+x atlassian-confluence-6.9.1-x64.bin
[root@confluence ~]# ./atlassian-confluence-6.9.1-x64.bin
Unpacking JRE ...
Starting Installer ...
This will install Confluence 6.9.1 on your computer.
OK [o, Enter], Cancel [c]
#选择确定安装
o
Click Next to continue, or Cancel to exit Setup.
Choose the appropriate installation or upgrade option.
Please choose one of the following:
Express Install (uses default settings) [1],
Custom Install (recommended for advanced users) [2, Enter],
Upgrade an existing Confluence installation [3]
#目录选择自定义
2
Select the folder where you would like Confluence 6.9.1 to be installed,
then click Next.
Where should Confluence 6.9.1 be installed?
[/opt/atlassian/confluence]
#这里填写自定义目录
/usr/local/atlassian/confluence
Default location for Confluence data
[/var/atlassian/application-data/confluence]
Configure which ports Confluence will use.
Confluence requires two TCP ports that are not being used by any other
applications on this machine. The HTTP port is where you will access
Confluence through your browser. The Control port is used to Startup and
Shutdown Confluence.
Use default ports (HTTP: 8090, Control: 8000) - Recommended [1, Enter], Set custom value for HTTP and Control ports [2]
#端口默认8090
1
Confluence can be run in the background.
You may choose to run Confluence as a service, which means it will start
automatically whenever the computer restarts.
Install Confluence as Service?
Yes [y, Enter], No [n]
#自动启动 选择y
y
Extracting files ...
Please wait a few moments while we configure Confluence.
Installation of Confluence 6.9.1 is complete
Start Confluence now?
Yes [y, Enter], No [n]
#选择y
y
Please wait a few moments while Confluence starts up.
Launching Confluence ...
Installation of Confluence 6.9.1 is complete
Your installation of Confluence 6.9.1 is now ready and can be accessed via
your browser.
Confluence 6.9.1 can be accessed at http://localhost:8090
Finishing installation ...
进入浏览器访问,如果是英文可以选择【语言】中文,选择【产品安装
先不要选择任何插件
记录服务器ID (B5BE-SJ3C-N42I-XCN0)
提取破解文件,关闭Confluence
# 进入你安装的目录
cd /usr/local/atlassian/confluence
# 关闭confluence
bin/stop-confluence.sh
# 将confluence 下面的一个atlassian-extras-decoder-v2-3.3.0.jar包复制一份出来
cp confluence/WEB-INF/lib/atlassian-extras-decoder-v2-3.3.0.jar ~/
# 将其改名为atlassian-extras-2.4.jar
mv ~/atlassian-extras-decoder-v2-3.3.0.jar ~/atlassian-extras-2.4.jar
#安装传输工具
cd ~
yum -y install lszrz
破解文件,源码里面有。
然后本地window电脑操作:
① 打开下载的破解工具,运行confluence_keygen.jar
②将记录的server ID填入,Name随便填。
③点击gen, 生成key并记录。
④点击patch,选择刚下传到本地的atlassian-extras-2.4.jar文件进行破解。
⑤不要关闭破解工具,过会需复制key里面的密钥
OK,破解完成后,将破解后的文件传回服务器
cd ~
mkdir bak
cd bak
# 传回服务器后,将名称改回之前的名称
mv atlassian-extras-2.4.jar atlassian-extras-decoder-v2-3.3.0.jar
# 然后覆盖回原路径
mv atlassian-extras-decoder-v2-3.3.0.jar /usr/local/atlassian/confluence/confluence/WEB-INF/lib/
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的类目录下:
sz
cp mysql-connector-java-5.1.46-bin.jar /usr/local/atlassian/confluence/lib/
- 上述操作完成后,重启完成重启confluence,
想不花钱确定麻烦没办法
service confluence start
回到输入key的界面,输入上面记录的key【之前说了别关闭破解软件】,点击下一步
选择我自己的数据库
OK,到此安装完成。关于Confluence的使用,http://www.confluence.cn/pages/viewpage.action?pageId=360467,界面描述是不是就是软件开发使用的,很高大上啊。非常贴合软件开发流程文档的思路。
- SVN安装
1.通过yum命令安装svnserve
yum -y install subversion
2.创建版本库目录(此仅为目录,为后面创建版本库提供存放位置)
mkdir /var/svnrepos
- 创建版本库目录
svnadmin create /var/svnrepos/svn
- 配置svn
authz:负责账号权限的管理,控制账号是否读写权限
passwd:负责账号和密码的用户名单管理
svnserve.conf:svn服务器配置文件
cd /var/svnrepos/svn/conf
编辑 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说了一些黑科技破解的方案。