使用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腳本的編碼格式,是否賦權等細節問題。以上供參考。