前言:博主資歷尚淺,很多東西都還在剛起步學習的階段,這幾天開發任務比較輕,就在自己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發布
- 利用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 構建項目查看結果