前言:部落客資曆尚淺,很多東西都還在剛起步學習的階段,這幾天開發任務比較輕,就在自己window系統下,模拟部署遠端伺服器,利用Jenkins + Ant + Tomcat 搭建了一個自動釋出部署的環境,特分享給大家。如果有哪些說的不對的地方,還請大家不吝賜教。
1、工具版本
Ant:apache-ant-1.9.1
Jenkins:jenkins-2.46.3
Tomcat:apache-tomcat-8.0.43
系統:window7
開發工具:IDEA
2、Web項目
簡述:這裡隻是在本地簡單的建構了一個Web項目,并沒有使用 Maven 或者在 Git 上托管。

3、在Web工程中加入Ant,利用Ant來自動建構部署
- 在項目的根目錄下建立build.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <project name="demo" default="deleteWar" basedir=".">
3 <property name="build" value="${basedir}/build"/>
4 <property name="build.class" value="${build}/classes"/>
5 <property name="src" value="${basedir}/src"/>
6 <property name="web" value="${basedir}/web"/>
7 <property name="lib" value="${web}/WEB-INF/lib"/>
8
9 <!--請将下面的路徑改為你本地的路徑-->
10 <property name="webserver" value="D:\apache-tomcat-8.0.43"/>
11
12 <!--定義CLASSPACH,編譯時用到你外部加入的包-->
13 <path id="classpath">
14 <pathelement location="${src}"/>
15 <fileset dir="${lib}" includes="***.jar"/>
16 </path>
17
18 <!--删除任務-->
19 <target name="clean" description="删除">
20 <echo message="删除目錄"/>
21 <delete dir="${build}"/>
22 </target>
23
24 <!--建立一個臨時目錄-->
25 <target name="init" description="建立目錄" depends="clean">
26 <echo message="建立目錄--以執行"/>
27 <mkdir dir="${build.class}"/>
28 </target>
29
30
31 <!--編譯java源檔案-->
32 <target name="compile" description="編譯檔案" depends="init">
33 <echo message="編譯檔案"/>
34 <javac srcdir="${src}" destdir="${build.class}">
35 <classpath refid="classpath"/>
36 <compilerarg line="-encoding GBK "/>
37 </javac>
38 </target>
39
40 <!--打成WAR包-->
41 <target name="generwar" depends="compile">
42 <echo message="打成WAR"/>
43 <war destfile="${build}/${ant.project.name}.war" webxml="${web}/WEB-INF/web.xml">
44 <fileset dir="web"/>
45 <lib dir="${lib}"/>
46 <classes dir="${build.class}"/>
47 </war>
48 </target>
49
50
51 <!--把WAR放到一個指定目錄,這裡是直接布署到TOMCAT伺服器-->
52 <target name="fabu" depends="generwar" description="釋出">
53 <copy file="${build}/${ant.project.name}.war" todir="${webserver}/webapps"/>
54 </target>
55
56
57 <!--把打好的WAR删除-->
58 <target name="deleteWar" depends="fabu" description="删除伺服器上的war">
59 <delete dir="${build}"/>
60 </target>
61
62 <!--停止tomcat-->
63 <target name="stop_tomcat">
64 <echo>停止tomcat</echo>
65 <exec executable="cmd" dir="${webserver}/bin" failonerror="false" append="true">
66 <env key="CATALINA_HOME" path="${webserver}"/>
67 <arg value="/c shutdown.bat"/>
68 </exec>
69 </target>
70
71 <!--啟動tomcat-->
72 <!--這裡做的主要是部署本地Tomcat伺服器的過程,差不多的思路是先把war釋出到webapps目錄下,接着再重新開機伺服器-->
73 <target name="start_tomcat" depends="fabu,stop_tomcat">
74 <echo>啟動tomcat</echo>
75 <exec executable="cmd" dir="${webserver}/bin" failonerror="false" append="true">
76 <env key="CATALINA_HOME" path="${webserver}"/>
77 <arg value="/c startup.bat"/>
78 </exec>
79 </target>
80
81 <!--部署到遠端伺服器-->
82 <!--這裡模拟了一個利用ant部署到遠端伺服器的過程,server是ftp伺服器IP位址,userid和password是ftp伺服器的賬号
83 和密碼,remotedir是你在建立伺服器時,為伺服器建立的目錄,我建立的是D:\apache-tomcat-8.0.43\webapps,fileset
84 是你要上傳的檔案,要利用ftp上傳需要導入兩個jar包,commons-net-1.4.0.jar、jakarta-oro-2.0.8.jar
85 -->
86 <target name="deploy" depends="generwar">
87 <ftp server="127.0.0.1"
88 userid="admin" password="123456" remotedir="/">
89 <fileset dir="${build}">
90 <include name="*.war"/>
91 </fileset>
92 </ftp>
93 </target>
94 </project>
- 運作Ant來部署項目
- Ant 的 jar 包導入說明
- 這裡再附屬說一下,如何将自己的localhost建立成ftp伺服器,我用的是 Quick Easy Ftp Server 4.0.0,下完這個軟體後,按照提示下一步、下一步設定好賬号和密碼即可
4、Jenkins和Ant內建部署項目
-
自動部署需要一個容器,那Jenkins是怎麼知道你的容器的呢?容器插件這個時候就要出場了!
首頁-》系統管理-》管理插件
搜尋deploy,很快就會找到這個deploy to container plugin,這裡部落客已經安裝好了,就不在安裝了,記住安裝完記得重新開機!
- 建構一個自由風格的Jenkins項目,由于我沒有托管Git或者使用maven。源碼管理那邊,隻要将你的源碼丢進Jenkins目錄中workspace你的工程下即可(隻有build一次,才會出現workspace目錄)
- 自動釋出部署項目。這裡介紹兩種方式,一種是利用Ant,一種是利用Jenkins将war包釋出到對應伺服器的容器中
- 利用Ant釋出
Ant + Tomcat + Jenkins 實作自動化部署 - 利用Jenkins釋出到對應容器中,無論是遠端、還是本地
Ant + Tomcat + Jenkins 實作自動化部署
備注:此處admin使用者,需要具備manager-gui,manager-script,manager-jmx,manager-status權限,否則報錯,使用者在D:\apache-tomcat-8.0.43\conf 下tomcat-user.xml下配置,新增以下使用者
<role rolename="manager-script" />
<user username="admin" password="nimda" roles="manager-script"/>
3. build 建構項目檢視結果