一、本节概述
由于公司项目繁多,不同的项目使用不同版本的JDK和WebLogic,因此在日常运维过程中,需要按需安装指定版本的JDK&WebLogic,因此本节先来说明下多版本JDK(JDK6、7、8)的选择安装,并以此掌握ant的必备补充包ant-contrib,我们可以利用它实现像 if else trycatch等扩展功能。
ant-contrib的下载地址:
https://sourceforge.net/projects/ant-contrib/files/ant-contrib/1.0b3/
很多年没更新了,下载这个ant-contrib-1.0b3-bin.zip即可。
下载后解压,将解压出的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的安装~