使用Ant对WebLogic应用服务进行自动备份应用包,上传新应用包,从新启动服务。进而实现应用服务的自动部署。web
1、将各个WebLogic应用服务添加自动停用服务及其重启shell脚本shell
kill.sh 供另外一个sh脚本调用,做用:根据Linux进程包含服务名删除WebLogic应用服务进程。#!/usr/bin/ksh NAME=$1 echo $NAME ID=`ps -ef | grep "$NAME" | grep -v "$0" | grep -v "grep" | awk '{print $2}'` echo $ID echo "---------------" for id in $ID do kill -9 $id echo "killed $id" done echo "---------------"
restart.sh做用对WebLogic应用服务进行关闭,并重启。中间里面的rm删除语句是为了清除WebLogic里面的缓存,以免WebLogic应用服务没有及时被更新,请根据实际状况处理。下面例子是一台机器上面部署了2个WebLogic应用服务。缓存
#!/usr/bin/ksh date echo "--------stop appservera------------" date ./kill.sh appservera rm -r /weblogic/user_projects/domains/你的domain域名/servers/appservera/tmp/_WL_user/应用文件夹名/ rm -r /weblogic/user_projects/domains/你的domain域名/servers/appservera/stage/应用文件夹名/ echo "--------start appservera-----------" ./startappservera.sh date sleep 100 date echo "--------stop appserverb-----------" ./kill.sh appserverb rm -r /weblogic/user_projects/domains/你的domain域名/servers/appserverb/tmp/_WL_user/应用文件夹名/ rm -r /weblogic/user_projects/domains/你的domain域名/servers/appserverb/stage/应用文件夹名/ echo "--------start appserverb-----------" ./startappserverb.sh date #exit 0
添加2个sh文件到/weblogic/user_projects/domains/你的domain域名/目录下,每个应用服务器都须要添加这2个脚本。若是采用FTP上传这2个脚本,记得保证脚本文件格式为UNIX。并使用如下语句进行执行权限赋权:服务器
$ cd /weblogic/user_projects/domains/你的domain域名/ $ chmod u+x kill.sh $ chmod u+x restart.sh
2、添加自动发布脚本app
最好找一台独立的非WebLogic应用服务器做为部署服务器,若是没有也可使用WebLogic应用服务器。但注意目录隔离,避免形成不良影响。下面为自动发布文件夹存放的文件列表:dom
log文件夹是存放发布日志,供发布分析或发邮件等使用。ssh
build_config.xml为ant执行部署配置文件,具体内容以下: 优化
<?xml version="1.0" encoding="UTF-8"?> <project default="run" name="autodeploy"> <description>系统自动发布脚本</description> <property file="config.properties" /> <!-- restartserver没法正常启动,在此放弃...改成页面手动更新 --> <target name="run" depends="init,bakup,upload,deploy,restartserver" /> <target name="init"> <echo>Initializing environment properties..</echo> <property environment="env" /> <property name="deploy.log.dir" value="${basedir}/log" /> <mkdir dir="${deploy.log.dir}" /> <tstamp> <format property="buidSqlName" pattern="yyyy-MM-dd" /> </tstamp> <tstamp> <format property="buidTime" pattern="yyyyMMddhhmmss" /> </tstamp> <property name="deploy.log.file" value="${deploy.log.dir}/${env.name}_${buidTime}.log" /> <record name="${deploy.log.file}" /> </target> <!-- 备份应用服务器上的程序 --> <target name="bakup" depends="init"> <echo message="SCP: bakup file from ${app.server01}" /> <sshexec host="${app.server01}" username="${app.userid}" password="${app.password01}" trust="true" command="cp -r ${app.remotedir}/${env.name} ${app.bakupdir}${buidTime}" /> <echo message="SCP: bakup file from ${app.server02}" /> <sshexec host="${app.server02}" username="${app.userid}" password="${app.password02}" trust="true" command="cp -r ${app.remotedir}/${env.name} ${app.bakupdir}${buidTime}" /> <echo message="SCP: bakup file from ${app.server03}" /> <sshexec host="${app.server03}" username="${app.userid}" password="${app.password03}" trust="true" command="cp -r ${app.remotedir}/${env.name} ${app.bakupdir}${buidTime}" /> <echo message="SCP: bakup file from ${app.server04}" /> <sshexec host="${app.server04}" username="${app.userid}" password="${app.password04}" trust="true" command="cp -r ${app.remotedir}/${env.name} ${app.bakupdir}${buidTime}" /> </target> <!-- war包上传至服务器 --> <target name="upload" depends="init"> <echo message="begin upload compress file to ${app.server01}" /> <scp todir="${app.userid}:${app.password01}@${app.server01}:${app.remotedir}" trust="true"> <fileset dir="${basedir}/"> <include name="${package.name}" /> </fileset> </scp> <echo message="begin upload compress file to ${app.server02}" /> <scp todir="${app.userid}:${app.password02}@${app.server02}:${app.remotedir}" trust="true"> <fileset dir="${basedir}/"> <include name="${package.name}" /> </fileset> </scp> <echo message="begin upload compress file to ${app.server03}" /> <scp todir="${app.userid}:${app.password03}@${app.server03}:${app.remotedir}" trust="true"> <fileset dir="${basedir}/"> <include name="${package.name}" /> </fileset> </scp> <echo message="begin upload compress file to ${app.server04}" /> <scp todir="${app.userid}:${app.password04}@${app.server04}:${app.remotedir}" trust="true"> <fileset dir="${basedir}/"> <include name="${package.name}" /> </fileset> </scp> </target> <!-- 部署war包 --> <target name="deploy" depends="init"> <echo message="upzip war package to ${app.server01}" /> <sshexec host="${app.server01}" username="${app.userid}" password="${app.password01}" trust="true" command=" cd ${app.remotedir}; unzip -o ${package.name} -d ${env.name};" /> <echo message="upzip war package to ${app.server02}" /> <sshexec host="${app.server02}" username="${app.userid}" password="${app.password02}" trust="true" command=" cd ${app.remotedir}; unzip -o ${package.name} -d ${env.name};" /> <echo message="upzip war package to ${app.server03}" /> <sshexec host="${app.server03}" username="${app.userid}" password="${app.password03}" trust="true" command=" cd ${app.remotedir}; unzip -o ${package.name} -d ${env.name};" /> <echo message="upzip war package to ${app.server04}" /> <sshexec host="${app.server04}" username="${app.userid}" password="${app.password04}" trust="true" command=" cd ${app.remotedir}; unzip -o ${package.name} -d ${env.name};" /> </target> <!-- 重启weblogic服务 --> <target name="restartserver" depends="init"> <echo message="restart server ${app.server01}" /> <sshexec host="${app.server01}" username="${app.userid}" password="${app.password01}" trust="true" command="cd ${appserver.path}/;sh restart.sh" failonerror="false" /> <echo message="restart server ${app.server02}" /> <sshexec host="${app.server02}" username="${app.userid}" password="${app.password02}" trust="true" command="cd ${appserver.path}/;sh restart.sh" failonerror="false" /> <echo message="restart server ${app.server03}" /> <sshexec host="${app.server03}" username="${app.userid}" password="${app.password03}" trust="true" command="cd ${appserver.path}/;sh restart.sh" failonerror="false" /> <echo message="restart server ${app.server04}" /> <sshexec host="${app.server04}" username="${app.userid}" password="${app.password04}" trust="true" command="cd ${appserver.path}/;sh restart.sh" failonerror="false" /> </target> </project>
config.properties为ant部署配置文件用到的一些变量属性配置文件,内容以下:ui
env.name=app basedir=. #发布包文件名 package.name=app.war #应用服务器环境配置信息 app.server01=10.0.209.1 app.server02=10.0.209.2 app.server03=10.0.209.3 app.server04=10.0.209.4 #WebLogic部署应用路径 app.remotedir=/com/applications #应用备份存放路径 app.bakupdir=/com/applications/backup/app_ #服务器用户名密码 app.userid=weblogic app.password01=weblogic@01 app.password02=weblogic@02 app.password03=weblogic@3 app.password04=weblogic@4 #服务器启动脚本存放路径 appserver.path=/weblogic/user_projects/domains/你的WebLogic域名
run.sh为自动发布调用脚本,须要赋予可执行权限,内容以下:编码
ant -buildfile build_config.xml run
赋权语句:
$ chmod u+x /自动发布脚本目录/run.sh
app.war应用war包。
3、发布调用及其工做原理
先将要发布的war包拷贝到自动发布目录下,替换app.war,执行该目录下的run.sh脚本,坐等自动发布....
原理:无非采用密令脚原本实现人工操做,使用ant相关命令实现自动部署操做。
过程可能存在一些繁琐,读者根据实际状况进行优化,注意sh脚本的编码格式,是否赋权等细节问题。以上供参考。