NO.103 Jenkins+Ant實現JDK、WebLogic、Domain批量安裝(3)多版本JDK的選擇安裝
一、本節概述
由於公司專案繁多,不同的專案使用不同版本的JDK和WebLogic,因此在日常運維過程中,需要按需安裝指定版本的JDK&WebLogic,因此本節先來說明下多版本JDK(JDK6、7、8)的選擇安裝,並以此掌握ant的必備補充包ant-contrib,我們可以利用它實現像 if else trycatch等擴充套件功能。
ant-contrib的下載地址:
下載後解壓,將解壓出的ant-contrib-1.0b3.jar以及lib目錄下的jar包(lib下有4個),共5個jar包都放在D:\Program Files\apache-ant-1.9.13\lib下,可以將解壓出的docs目錄放在D:\Program Files\apache-ant-1.9.13目錄下,便於先檢視ant manual一樣學習ant-contrib的各task。
二、本地準備工作
準備好各版本安裝包 ,本地檔案位置:
d:\tmp\inventory\jdk-6u45-linux-amd64.rpm;
d:\tmp\inventory\jdk-7u72-linux-x64.rpm;
d:\tmp\inventory\jdk-8u72-linux-x64.rpm;
其它不多說了,具體參見上一篇第二部分內容。
三、指令碼及說明
在上一篇提到的引數檔案d:\tmp\build_params.properties中增加各JDK rpm包檔名的變數定義。
變數定義的好處在於如果某一版本的JDK有了新版本,只需要該此處的變數定義即可。
JDK6.filename=jdk-6u45-linux-amd64.rpm JDK7.filename=jdk-7u72-linux-x64.rpm JDK8.filename=jdk-8u72-linux-x64.rpm
這次build.xml的內容變化較大,先貼一下:
<?xml version="1.0" ?> <project> <!--Task definition for Ant-Contrib--> <taskdef resource="net/sf/antcontrib/antlib.xml" /> <property file="build_params.properties" /> <!-- Install JDK--> <target name="InstallJDK" > <if> <equals arg1="${installType}" arg2="872" trim="true" casesensitive="false" /> <then> <echo>安裝JDK872</echo> <antcall target="installJDK8" /> </then> <elseif> <equals arg1="${installType}" arg2="772" trim="true" casesensitive="false" /> <then> <echo>安裝JDK772</echo> <antcall target="installJDK7" /> </then> </elseif> <else> <echo>安裝JDK645</echo> <antcall target="installJDK6" /> </else> </if> </target> <!-- rpm方式安裝JDK6 --> <target name="installJDK6" > <antcall target="installJDKByRpm"> <param name="file.fullPath" value="${inventory.dir}/${JDK6.filename}"/> </antcall> </target> <!-- rpm方式安裝JDK7 --> <target name="installJDK7" > <antcall target="installJDKByRpm"> <param name="file.fullPath" value="${inventory.dir}/${JDK7.filename}"/> </antcall> </target> <!-- rpm方式安裝JDK7 --> <target name="installJDK8" > <antcall target="installJDKByRpm"> <param name="file.fullPath" value="${inventory.dir}/${JDK8.filename}"/> </antcall> </target> <target name="installJDKByRpm" > <antcall target="scp"> <param name="server.user" value="${root.user}"/> <param name="server.password" value="${root.password}"/> </antcall> <antcall target="sshByCmd"> <param name="server.user" value="${root.user}"/> <param name="server.password" value="${root.password}"/> <param name="command" value="cd ${upload.path};rpm -ivh ${upload.filename}"/> </antcall> </target> <target name="scp" > <scp file="${file.fullPath}" todir="${server.user}:${server.password}@${server.ip}:${upload.path}/" trust="true"/> </target> <target name="sshByCmd" > <sshexec host="${server.ip}" username="${server.user}" password="${server.password}" trust="true" command="${command}"/> </target> <target name="installAllJDK" depends="installJDK6,installJDK7,installJDK8" /> </project>
1. 首先注意這一句,很重要,沒有它就無法使用ant-contrib的各種task了
<!--Task definition for Ant-Contrib-->
<taskdef resource="net/sf/antcontrib/antlib.xml" />
2. 有一個外部變數installType, 使用if elseif邏輯判讀它的值,並進行對應的處理;
3.由於多個版本JDK的安裝過程沒有什麼不同,因此每個版本的安裝指令碼很相似,就是安裝包名不同,在前述指令碼引數化的基礎上,我們可以像Java一樣對Ant Task進行封裝,首先將scp和sshexec分別放到叫scp和sshByCmd的target中,並將rpm安裝也封裝為一個獨立target:installJDKByRpm,這樣做的好處可以在後面介紹Jenkins伺服器與應用伺服器互信時看到。
4.如果需要在一臺伺服器上安裝多個JDK,可以呼叫target:installAllJDK,注意depends的用法和JDK的安裝順序,因為使用安裝包安裝JDK可以從低版本升級到高版本,反之不行。那麼先裝了高版本又想裝低版本呢?賣個關子,下節再講。
四、執行
執行
ant InstallJDK -DinstallType=JDK772
則將執行JDK7的安裝~