WebSphere服务器下Java Web项目更新部署的优化方案详解编程语言

现状

项目已部署在生产环境的WebSphere服务器集群下,但公司并没有在生产环境下集成项目自动构建工具Jenkins。

WebSphere服务器下Java Web项目更新部署的优化方案详解编程语言

但是,由于项目稳定性的需要,又不能进行全量部署或增量部署。
注:如果随意进行全量部署,可能会将线上已经稳定的代码替换掉,变成测试环境中未经严格检验的代码。

傻瓜式部署

所以,当有业务逻辑发生变更时,为了谨慎起见,只能替换发生变动的字节码文件或jsp文件。
其中,假设我们需要替换的文件是HelloWorld.class,部署的项目位于/opt/IBM路径下,那么需要执行的Linux命令如下:
找出HelloWorld.class所在路径并进入:

find /opt/IBM/ -name 'HelloWorld.class' 
cd /opt/IBM/foundpath/ 

检查HelloWorld.class的最后修改日期:

ll HelloWorld.class 

上传最新的HelloWorld.class文件:

rz -y 

再次检查:

ll HelloWorld.class 

一共需要执行四条命令才能完成对HelloWorld.class文件的更新操作,而且极易出错。

优化脚本

现在Shell脚本(deploy.sh)中写入以上四条命令,以达到高效低失误执行的目的:

#将sh后的第一个参数定义为变量var 
var=$1 
echo var: $var 
backdir=/opt/backup/ 
updir=/opt/upload/ 
 
#找到vars对应文件名所在的路径,并分离出文件名和路径名 
wholename=`find /opt/IBM/ -name $var` 
echo wholename: $wholename 
 
#分离出路径名和文件名 
dirname=${wholename%/*} 
filename=${wholename##*/} 
echo dirname: $dirname 
echo filename: $filename 
 
#进入文件所在的路径,检查并剪切原文件到备份文件夹下 
cd $dirname 
echo firstcheck: 
ls -l $filename 
mv $filename $backdir 
 
#进入上传文件夹,将最新文件剪切到原文件路径下 
cd $updir 
mv $var $dirname 
 
#进入文件所在的路径,进行检查 
cd $dirname 
echo secondcheck: 
ls -l $filename 

注意:以上脚本只适合对只有唯一命名的class文件进行替换。比如find命令的搜索范围/opt/IBM文件夹下只有HelloWorld.class,就可以使用以上脚本。

针对文件路径不唯一的优化
在明确知道在哪个路径部署文件的前提下,将find后面的路径写得更详细一点,把 find /opt/IBM/ -name $var 改为 find /opt/IBM/correct/path/

针对文件不存在的优化
当文件不存在上述路径中,显然deploy.sh是不适合执行的,所以需要多一步检查工作checkfile.sh

    var=$1 
    echo var: $var 
     
    wholename=`find /opt/IBM/ -name $var` 
    echo wholename: $wholename 

如果执行checkfile.sh能打印出文件的完整路径,那么就可以执行deploy.sh部署文件。

./checkfile.sh HelloWorld.class 
./deploy.sh HelloWorld.class 

Shell脚本中涉及到提取路径名和文件名的操作:

提取文件名

${var##*/} 

该方式是从左开始最大化匹配到字符”/”,然后截掉左边内容(包括字符”/”),返回余下右侧部分。

提取路径名

${var%/*} 

该方式是从右开始第一次匹配到字符”/”,然后截掉右边内容(包括字符”/”),返回余下左侧部分。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/19603.html

(0)
上一篇 2021年7月19日 22:18
下一篇 2021年7月19日 22:18

相关推荐

发表回复

登录后才能评论