天天看點

Ant + Tomcat + Jenkins 實作自動化部署

前言:部落客資曆尚淺,很多東西都還在剛起步學習的階段,這幾天開發任務比較輕,就在自己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 上托管。

Ant + Tomcat + Jenkins 實作自動化部署

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 + Tomcat + Jenkins 實作自動化部署
  • Ant 的 jar 包導入說明
Ant + Tomcat + Jenkins 實作自動化部署
  • 這裡再附屬說一下,如何将自己的localhost建立成ftp伺服器,我用的是 Quick Easy Ftp Server 4.0.0,下完這個軟體後,按照提示下一步、下一步設定好賬号和密碼即可
Ant + Tomcat + Jenkins 實作自動化部署

4、Jenkins和Ant內建部署項目

  • 自動部署需要一個容器,那Jenkins是怎麼知道你的容器的呢?容器插件這個時候就要出場了!

    首頁-》系統管理-》管理插件

    搜尋deploy,很快就會找到這個deploy to container plugin,這裡部落客已經安裝好了,就不在安裝了,記住安裝完記得重新開機!

Ant + Tomcat + Jenkins 實作自動化部署
  • 建構一個自由風格的Jenkins項目,由于我沒有托管Git或者使用maven。源碼管理那邊,隻要将你的源碼丢進Jenkins目錄中workspace你的工程下即可(隻有build一次,才會出現workspace目錄)
Ant + Tomcat + Jenkins 實作自動化部署
  •   自動釋出部署項目。這裡介紹兩種方式,一種是利用Ant,一種是利用Jenkins将war包釋出到對應伺服器的容器中 
  1.  利用Ant釋出  
    Ant + Tomcat + Jenkins 實作自動化部署
  2. 利用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 建構項目檢視結果

Ant + Tomcat + Jenkins 實作自動化部署
Ant + Tomcat + Jenkins 實作自動化部署