windows下自动上传 war 到 Linux 服务器
- 下面的 cmd 脚本通过 Maven 命令执行打包,生成 war
- 通过 pscp 将 war 上传到服务器
- 通过 plink 远程调用 Linux 上的 shell 脚本
- 其中 pscp 来自 PUTTY
- putty_privatekey 用于 plink 无密码登录 Linux,也可以通过用户名和密码的方式
- 其中 test-web-deploy.sh 用于自动部署 war
@echo offset project_path=D:\svn-workspace\test-webset local_file=%project_path%\target\test-web.warset putty_privatekey=D:\soft\keys\test-privatekey.ppkset deploy-shell=test-web-deploy.sh set server_user_1=devset server_passwd_1=123set server_ip_1=10.32.22.61 set server_path=/usr/local/appsecho ---------------------------------------------- execute mvn clean installD:cd %project_path%call mvn clean install -Dmaven.test.skip=true -Ptest echo ---------------------------------------------- upload war file to server call pscp -l %server_user_1% -pw %server_passwd_1% -r %local_file% %server_ip_1%:%server_path%echo ---------------------------------------------- execute %deploy-shell%call plink -i %putty_privatekey% %server_user_1%@%server_ip_1% sh %deploy-shell% pause
Linux 自动部署 war
- 在下面的脚本是 test-web-deploy.sh,会调用 tomcat_restart.sh,用于重启 Tomcat
#!/bin/bashapp_name=test-webapp_path=/usr/local/appstomcat_path=/usr/local/soft/tomcat-test-webcd $app_pathif [ -f ${app_name}.war ];then echo find ${app_name}.war, unpack the file then restart the tomcat rm -rvf ./${app_name}/* mv ./${app_name}.war $app_path/${app_name}/ cd $app_path/${app_name} jar -xvf ${app_name}.war rm -rvf ${app_name}.war else echo not find ${app_name}.war, only restart the tomcatficd $tomcat_pathsh tomcat_restart.sh
自动重启 Tomcat
- 下面的脚本是 tomcat_restart.sh,基本思路是通过 Tomcat 安装路径找到进程pid,杀死后再重启
#!/bin/bash# 首先找到tomcat根目录, 确保当前脚本在tomcat根目录下tomcat_path=/usr/local/soft/tomcat-test-webecho tomcat path is $tomcat_path# 找到tomcat的进程idtomcat_pid=$(ps -ef|grep $tomcat_path|gawk '$0 !~/grep/ {print $2}' |tr -s '\n' ' ')if [ "$tomcat_pid" ];then echo tomcat process id is $tomcat_pid # 杀掉tomcat进程 if kill -9 $tomcat_pid then echo kill tomcat process success else echo kill tomcat process fail fielse echo tomcat is already deadfi# 启动tomcat并重定向到日志输出sh $tomcat_path/bin/startup.shtail -f $tomcat_path/logs/catalina.out
可能遇到的问题
执行 jar -xvf xxx.war
的时候提示:/bin/bash: jar: command not found
解决如下
cd /usr/binsudo ln -s -f /usr/lib/jvm/jdk1.6.0_30/bin/jar
jdk安装目录按自己实际情况更改
如果提示javah:commond not found
,于是照葫芦画瓢,输入命令
cd /usr/binln -s -f /usr/lib/jvm/jdk1.6.0_30/bin/javah
总结
- 该系列脚本解决了自动部署问题,非常适用于敏捷开发
- 基于该系列脚本可以实现自动发布系统的开发 :)