Tomcat+Eclipse環(huán)境下使用Jenkins2.38搭建持續(xù)集成(CI)環(huán)境
Posted on 2017-01-02 11:51 ZhouFeng 閱讀(407) 評論(0) 編輯 收藏 所屬分類: 原創(chuàng) 、Web開發(fā) 、Web服務(wù)器在網(wǎng)上看到很多關(guān)于使用Jenkins構(gòu)建持續(xù)集成環(huán)境的文章,在有空的時(shí)候也希望嘗試一下,這樣可以在測試服務(wù)器上看到提交的最新版本
本機(jī)下載安裝包,安裝到C:\Jenkins,如下配置也是基于此目錄進(jìn)行,下載及安裝過程截圖如下

選擇Download Jenkins

下拉選擇相應(yīng)的操作系統(tǒng)版本,也可以直接下載war包,本文下載Windows版本的安裝包,安裝過程指定安裝目錄即可,安裝完成后,會自動(dòng)啟動(dòng)瀏覽器進(jìn)行配置

根據(jù)頁面提示,在文件中找到密碼填入

選擇插件,本例選擇第二項(xiàng),自己定義插件,打開第二項(xiàng)里的默認(rèn)選擇和推薦插件一樣,如果不做修改,就相當(dāng)于選擇推薦插件安裝

安裝完成后,設(shè)置管理員賬號

保存結(jié)束安裝

點(diǎn)擊開始進(jìn)入Jenkins界面

在Jenkins里創(chuàng)建項(xiàng)目,當(dāng)前選擇的是自由項(xiàng)目,寫好項(xiàng)目名稱,后續(xù)就是對項(xiàng)目進(jìn)行配置,如果不希望保留過多的舊構(gòu)建,可以設(shè)置丟棄。另外還需要獲取源碼的服務(wù)器,默認(rèn)支持CVS和Subversion,也可以通過插件支持Git,因當(dāng)前項(xiàng)目托管于SVN,配置如下圖

后面是如何觸發(fā)的配置,如下設(shè)置為每天6:30進(jìn)行構(gòu)建,每一個(gè)小時(shí)檢查一下源碼,主要是獲取到代碼后的動(dòng)作設(shè)置

在動(dòng)作設(shè)置里用Windows的批處理方式進(jìn)行,原本考慮在服務(wù)器上做一個(gè)批處理,由Jenkins調(diào)用,經(jīng)測試需要用絕對路徑,不知是不是某個(gè)地方?jīng)]配置好,后來就改用這種方式,對服務(wù)進(jìn)行啟動(dòng)停止控制,對工程進(jìn)行部署
經(jīng)測試,此方式可以用,當(dāng)前用來解決Tomcat+Eclipse環(huán)境下的工程自動(dòng)構(gòu)建問題,寫在這個(gè)地方做個(gè)記錄,如果有機(jī)會,嘗試一下Maven,看看是不是要簡單點(diǎn)
1.下載安裝Jenkins
可以在http://mirrors.jenkins-ci.org上下載安裝包,也可以選擇在官網(wǎng)(https://jenkins.io)上下載war包(http://mirrors.jenkins.io/war-stable/latest/jenkins.war)或是安裝包(http://mirrors.jenkins-ci.org/windows/jenkins-2.38.zip),寫這篇文章時(shí)最新版本為2.38。如果選擇安裝包方式,下載后安裝即可,安裝完成后會自動(dòng)啟動(dòng)瀏覽器向?qū)В鶕?jù)提示操作完成安裝本機(jī)下載安裝包,安裝到C:\Jenkins,如下配置也是基于此目錄進(jìn)行,下載及安裝過程截圖如下

選擇Download Jenkins

下拉選擇相應(yīng)的操作系統(tǒng)版本,也可以直接下載war包,本文下載Windows版本的安裝包,安裝過程指定安裝目錄即可,安裝完成后,會自動(dòng)啟動(dòng)瀏覽器進(jìn)行配置

根據(jù)頁面提示,在文件中找到密碼填入

選擇插件,本例選擇第二項(xiàng),自己定義插件,打開第二項(xiàng)里的默認(rèn)選擇和推薦插件一樣,如果不做修改,就相當(dāng)于選擇推薦插件安裝

安裝完成后,設(shè)置管理員賬號

保存結(jié)束安裝

點(diǎn)擊開始進(jìn)入Jenkins界面

2.啟動(dòng)Jenkins
Jenkins默認(rèn)工作目錄會在當(dāng)前用戶目錄下創(chuàng)建.jenkins目錄,也可以通過設(shè)置環(huán)境變量來修改,例如:set JENKINS_HOME=C:\jenkins
然后重新啟動(dòng)jenkins,可以放在與安裝目錄不同的地方
進(jìn)入安裝目錄C:\Jenkins,用命令行方式啟動(dòng)
默認(rèn)端口為8080,如果需要指定端口,可以使用如下參數(shù)指定,如指定端口為9000進(jìn)入安裝目錄C:\Jenkins,用命令行方式啟動(dòng)
java -jar jenkins.war
java -jar jenkins.war --httpPort=9000
也可以修改目錄下的jenkins.xml配置文件,將其中的httpPort修改即可<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments>
3.部署應(yīng)用到Jenkins
之前的工程是基于Tomcat+Eclipse開發(fā)的,工程不是用Maven管理的,后面就對工程進(jìn)行了改造,用Ant編譯,添加了build.xml文件,在Ant中需要找到Tomcat目錄,為了靈活一點(diǎn),在系統(tǒng)里添加了Tomcat的環(huán)境變量CATALINA_HOME,以及Ant環(huán)境的安裝,這是對原有工程的改造,如果新的工程采用Maven方式的話,應(yīng)該會沒有這么麻煩,附上build.xml<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project basedir="." default="build" name="xi">
<property environment="env"/>
<property name="tomcat.home" value="${env.CATALINA_HOME}" />
<property name="tomcat.lib" value="${env.CATALINA_HOME}/lib" />
<property name="web.root" value="${env.CATALINA_HOME}/webapps"/>
<property name="ant.home" value="${env.ANT_HOME}" />
<property name="debuglevel" value="source,lines,vars"/>
<property name="target" value="1.7"/>
<property name="source" value="1.7"/>
<property name="webRoot.dir" value="${basedir}/WebContent" />
<property name="src.dir" value="${basedir}/src" />
<property name="lib.dir" value="${webRoot.dir}/WEB-INF/lib" />
<property name="log.file" value="${tomcat.home}/webapps/log.info"/>
<tstamp>
<format property="build.time" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>
<path id="prj.classpath">
<pathelement location="build/classes"/>
<fileset dir="${tomcat.lib}">
<include name="*.jar" />
</fileset>
<fileset dir="${lib.dir}">
<include name="*.jar" />
</fileset>
</path>
<path id="tomcat.classpath">
<fileset dir="${tomcat.lib}">
<include name="*.jar" />
</fileset>
<fileset dir="${tomcat.home}/bin">
<include name="*.jar" />
</fileset>
</path>
<target name="init">
<echo message="---------- init ----------"></echo>
<mkdir dir="build/classes"/>
<copy includeemptydirs="false" todir="build/classes">
<fileset dir="src">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<target name="clean">
<echo message="---------- clean ----------"></echo>
<delete dir="build/classes"/>
<delete file="build/${ant.project.name}.war"></delete>
</target>
<target name="compile" depends="init">
<echo message="${ant.project.name}: ${ant.file}"/>
<javac debug="true" debuglevel="${debuglevel}" destdir="build/classes" includeantruntime="false" encoding="UTF-8">
<src path="src"/>
<classpath refid="prj.classpath"/>
</javac>
<delete file="build/classes/gen-conf.xml"/>
</target>
<target name="build" depends="compile" description="make war">
<war destfile="build/${ant.project.name}.war" basedir="WebContent" webxml="WebContent/WEB-INF/web.xml">
<!-- lib dir="${lib.dir}"></lib -->
<classes dir="${basedir}/build/classes"></classes>
</war>
</target>
<target name="deploy" depends="build" description="deploy to tomcat">
<echo message="----------deploy to tomcat----------"></echo>
<delete file="${tomcat.home}/webapps/${ant.project.name}.war" />
<delete dir="${tomcat.home}/webapps/${ant.project.name}" />
<copy file="build/${ant.project.name}.war" todir="${tomcat.home}/webapps" />
</target>
<target name="undeploy" description="deploy to tomcat">
<echo message="---------- undeploy project ----------"></echo>
<delete file="${tomcat.home}/webapps/${ant.project.name}.war" />
<delete dir="${tomcat.home}/webapps/${ant.project.name}" />
</target>
</project>
這樣寫是為了在Jenkins里調(diào)用Ant完成編譯和部署的工作。<project basedir="." default="build" name="xi">
<property environment="env"/>
<property name="tomcat.home" value="${env.CATALINA_HOME}" />
<property name="tomcat.lib" value="${env.CATALINA_HOME}/lib" />
<property name="web.root" value="${env.CATALINA_HOME}/webapps"/>
<property name="ant.home" value="${env.ANT_HOME}" />
<property name="debuglevel" value="source,lines,vars"/>
<property name="target" value="1.7"/>
<property name="source" value="1.7"/>
<property name="webRoot.dir" value="${basedir}/WebContent" />
<property name="src.dir" value="${basedir}/src" />
<property name="lib.dir" value="${webRoot.dir}/WEB-INF/lib" />
<property name="log.file" value="${tomcat.home}/webapps/log.info"/>
<tstamp>
<format property="build.time" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>
<path id="prj.classpath">
<pathelement location="build/classes"/>
<fileset dir="${tomcat.lib}">
<include name="*.jar" />
</fileset>
<fileset dir="${lib.dir}">
<include name="*.jar" />
</fileset>
</path>
<path id="tomcat.classpath">
<fileset dir="${tomcat.lib}">
<include name="*.jar" />
</fileset>
<fileset dir="${tomcat.home}/bin">
<include name="*.jar" />
</fileset>
</path>
<target name="init">
<echo message="---------- init ----------"></echo>
<mkdir dir="build/classes"/>
<copy includeemptydirs="false" todir="build/classes">
<fileset dir="src">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<target name="clean">
<echo message="---------- clean ----------"></echo>
<delete dir="build/classes"/>
<delete file="build/${ant.project.name}.war"></delete>
</target>
<target name="compile" depends="init">
<echo message="${ant.project.name}: ${ant.file}"/>
<javac debug="true" debuglevel="${debuglevel}" destdir="build/classes" includeantruntime="false" encoding="UTF-8">
<src path="src"/>
<classpath refid="prj.classpath"/>
</javac>
<delete file="build/classes/gen-conf.xml"/>
</target>
<target name="build" depends="compile" description="make war">
<war destfile="build/${ant.project.name}.war" basedir="WebContent" webxml="WebContent/WEB-INF/web.xml">
<!-- lib dir="${lib.dir}"></lib -->
<classes dir="${basedir}/build/classes"></classes>
</war>
</target>
<target name="deploy" depends="build" description="deploy to tomcat">
<echo message="----------deploy to tomcat----------"></echo>
<delete file="${tomcat.home}/webapps/${ant.project.name}.war" />
<delete dir="${tomcat.home}/webapps/${ant.project.name}" />
<copy file="build/${ant.project.name}.war" todir="${tomcat.home}/webapps" />
</target>
<target name="undeploy" description="deploy to tomcat">
<echo message="---------- undeploy project ----------"></echo>
<delete file="${tomcat.home}/webapps/${ant.project.name}.war" />
<delete dir="${tomcat.home}/webapps/${ant.project.name}" />
</target>
</project>
在Jenkins里創(chuàng)建項(xiàng)目,當(dāng)前選擇的是自由項(xiàng)目,寫好項(xiàng)目名稱,后續(xù)就是對項(xiàng)目進(jìn)行配置,如果不希望保留過多的舊構(gòu)建,可以設(shè)置丟棄。另外還需要獲取源碼的服務(wù)器,默認(rèn)支持CVS和Subversion,也可以通過插件支持Git,因當(dāng)前項(xiàng)目托管于SVN,配置如下圖

后面是如何觸發(fā)的配置,如下設(shè)置為每天6:30進(jìn)行構(gòu)建,每一個(gè)小時(shí)檢查一下源碼,主要是獲取到代碼后的動(dòng)作設(shè)置

在動(dòng)作設(shè)置里用Windows的批處理方式進(jìn)行,原本考慮在服務(wù)器上做一個(gè)批處理,由Jenkins調(diào)用,經(jīng)測試需要用絕對路徑,不知是不是某個(gè)地方?jīng)]配置好,后來就改用這種方式,對服務(wù)進(jìn)行啟動(dòng)停止控制,對工程進(jìn)行部署
經(jīng)測試,此方式可以用,當(dāng)前用來解決Tomcat+Eclipse環(huán)境下的工程自動(dòng)構(gòu)建問題,寫在這個(gè)地方做個(gè)記錄,如果有機(jī)會,嘗試一下Maven,看看是不是要簡單點(diǎn)