在一次项目实施过程中,第一次接触到小集群的部署项目,针对持续迭代的集成测试环境、系统测试环境,使用shell+bat脚本实现。
ps:不用jenkins的原因是内网环境,同时代码管理使用的是CVS工具,所以没有采用。
一、环境介绍
二、编写shell脚本(linux)
前端服务器的中间件是nginx,核心操作就是更换前端资源文件,并重启nginx服务
在服务器上,新建一个reload.sh文件,笔者放置的路径是/usr/local/,
#!/bin/bash # 设置工作路径 dir=/usr/local/ if [ -e ${dir}/dist.zip ];then cd ${dir}/ffms echo '************ 输出前端资源目录下文件,并删除 ************' ls rm -rf ${dir}/ffms/* # 复制刚刚上传的文件,并赋权限 echo '************复制刚刚上传的前端文件,并赋权限************' chmod -R 750 dist.zip unzip dist.zip mv dist/* . ls ${dir}/ffms # 重启nginx echo '************ 重启nginx ************' nginx -s reload else echo '文件不存在' fi
后端的中间件是tomcat,脚本的核心操作就是kill对应的进程,同时替换资源包,并启动
#!/bin/bash # 设置工作路径 dir=/usr/local/tomcat if [ -e ${dir}/forex.war ];then cd ${dir} ps -ef | grep tomcat ps -ef | grep tomcat | grep -v grep | awk '{print "kill -9 "$2}' | sh slepp 5 ps -ef | grep tomcat echo '********* 删除原来的war包刚刚上传到webapps *********' ls ${dir}/forex.war rm -rf ./webapps/forex* mv ${dir}/forex.war ./wenapps # 启动tomcat echo '********* 启动tomcat *********' nohup ./bin/startup.sh & slepp 15 ps -ef | grep tomcat else echo '文件不存在' fi
三、配置公钥登录
公钥登录是为了解决每次登录服务器都要输入密码的问题,流行使用RSA加密方案,主要流程包含:
1、客户端生成RSA公钥和私钥
2、客户端将自己的公钥存放到服务器
3、客户端请求连接服务器,服务器将一个随机字符串发送给客户端
4、客户端根据自己的私钥加密这个随机字符串之后再发送给服务器
5、服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。这样就不用使用密码了。
客户端生成RSA公钥和私钥(打开windows cmd 执行如下脚本):
ssh-keygen -t rsa
一直回车后回在 用户目录下的.ssh文件夹下面生成公钥和私钥
将id_res.pub上传至远程服务器,并将公钥追加到指定文件下(如果不存在,需要创建路径和文件)
cat id_res.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys chmod 700 ~/.ssh
PS:权限不设置也会报错的,不能直接设置为777
四、编写bat脚本(windows)
PS:注意一定要用双引号,单引号会报 【sh: -c: line 0: unexpected EOF while looking for matching `】
rem 创建备份目录 set dd="%date:~8,2%" set mm="%date:~5,2%" set yy="%date:~0,4%" set Thh="%TIME:~0,2%" set Tmm="%TIME:~3,2%" set folder="%yy%-%mm%-%dd%-%Thh%-%Tmm%" md C:\\users\\lxs\\work\\war\\%folder% pause 1 rem 移动原来的文件到备份文件夹 move C:\\users\\lxs\\work\\war\\forex.war C:\\users\\lxs\\work\\war\\%folder%\\ move C:\\users\\lxs\\work\\war\\dist.zip C:\\users\\lxs\\work\\war\\%folder%\\ rem 移动打包好的前后端文件到工作目录 move 代码路径\\target\\forex.war C:\\users\\lxs\\work\\war\\forex.war move 代码路径\\target\\dist.zip C:\\users\\lxs\\work\\war\\dist.zip rem 上传文件,并执行脚本 scp -p22 C:\\users\\lxs\\work\\war\\forex.war root@ip:/usr/local ssh -t root@ip:/usr/local "source /etc/profile && bash /usr/local/restart.sh" scp -p22 C:\\users\\lxs\\work\\war\\dist.zip root@ip:/usr/local ssh -t root@ip:/usr/local "source /etc/profile && bash /usr/local/reload.sh"