需求:
使用Jenkins的「參數化構建過程」,由用戶手動輸入參數。通過ant腳本接收這個參數,並輸出(當然,中間也可以進行復雜的處理,這里為了說明問題,僅做簡單的輸出)。
1.基礎環境
Jenkins1.509.4(現在Jenkins已經升級到2.x,版本差異不是很大)
apache-ant-1.9.6
apache-tomcat-7.0.6(注:Jenkins放在tomcat中,可參考我寫的 《Jenkins默認工作空間及更改默認工作空間》 一文)
前提是已經有jdk的支持並配置好了相關的環境變量~
2.思路分析
工作一:在Jenkins中配置job的時候選中「參數化構建過程」,選擇String Parameter。
工作二:寫一個含main方法的類,打印這個參數。
工作三(重要的工作):連接輸入和輸出。具體可以通過ant腳本來實現。ant腳本又可以在用命令行執行的時候傳遞參數。
現在整理一下思路:Jenkins「參數化構建過程」輸入參數 → Jenkins執行ant腳本並將參數傳遞給ant腳本 → ant腳本對含有main方法的類進行編譯、打包、執行等操作。
3.開始練兵
說明:
實際過程可能是:工作二 → 工作一 → 工作三。
3.1 工作一

3.2 工作三

注:cd javaant是因為build.xml文件會放在這個目錄之下,見下圖:

這里還涉及一個很重要的知識點:如何在Jenkins中本地構建job?
答案是直接將整個項目拷貝至Jenkins的工作空間之下。如上圖,我的Jenkins默認工作空間已經更改為E:\jenkins\,在此目錄下建立一個目錄src-usercreate,專門用於構建本地job。
3.3 工作二
直接上代碼了。
1 package com.primeton.ant; 2 3 public class HelloWorld { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 String version = args[0]; 10 System.out.println("Hello,"+version+"!"); 11 } 12 13 }
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 <project name="javaant" basedir="." default="main"> 3 4 <property name="src.dir" value="src"/> 5 <property name="build.dir" value="build"/> 6 <property name="classes.dir" value="${build.dir}/classes"/> 7 <property name="jar.dir" value="${build.dir}/jar"/> 8 <property name="main-class" value="com.primeton.ant.HelloWorld"/> 9 <property name="CODE_VERSION" value="v1.2.2"/> 10 <target name="clean"> 11 <delete dir="${build.dir}"/> 12 </target> 13 14 <target name="compile"> 15 <mkdir dir="${classes.dir}"/> 16 <javac srcdir="${src.dir}" destdir="${classes.dir}"/> 17 </target> 18 19 <target name="jar" depends="compile"> 20 <mkdir dir="${jar.dir}"/> 21 <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}"> 22 <manifest> 23 <attribute name="Main-Class" value="${main-class}"/> 24 </manifest> 25 </jar> 26 </target> 27 28 <target name="run" depends="jar"> 29 <java jar="${jar.dir}/${ant.project.name}.jar" fork="true"> 30 <arg value="${CODE_VERSION}"/> 31 </java> 32 </target> 33 34 <target name="clean-build" depends="clean,jar"/> 35 36 <target name="main" depends="clean,run"/> 37 38 </project>
整個Java工程目錄層次如下:

注:上面已經提及,需要將整個項目(包含build.xml)拷貝到Jenkins的工作空間目錄下(我的是E:\jenkins\src-usercreate\)。
3.4 構建結果
在Jenkins中對該作業點擊『立即構建』,要求輸入CODE_VERSION的值,這里了輸入v2.0。執行結果如下:

4.小結
①Jenkins 「參數化構建過程」 供用戶輸入參數。
②ant腳本可以作為中間媒介將上述參數傳遞給Java代碼 [ 注意理解這個參數的傳遞過程 ]。
