日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境

發布時間:2025/3/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

??? 但凡一個略有規模的項目都需要一個持續集成環境的支撐,為什么需要持續集成環境,我們來看一個例子。假如一個項目,由A、B兩位程序員來協作開發,A負責前端模塊,B負責后端模塊,前端依賴后端。A和B都習慣使用SVN作為代碼管理工具,他們分別開始工作,一個功能完成后會提交到SVN,以便對方能夠使用。一天B告訴A,我的某個功能完成了,提交到SVN,你更新下來試一下。A便從SVN更新下來代碼,結果一試,我檫報錯,于是告訴B你的代碼有問題,B檢查了一下確實有問題,然后B經過1個小時修改后,重新上傳到SVN,A更新下來可以使用了。又過了幾個小時,A發現B的代碼仍然有問題,B檢查了半天,沒找到問題所在,后來開發組長檢查他們的代碼發現是兩個人使用不同版本的jar包導致的,這個問題確認難以發現,A把jar包的版本弄得和B一樣,A和B又開始繼續工作。終于有一天項目完成了,需要發布程序,這時A從自己的開發環境上編譯一個版本,把他上傳到服務器上,程序運行的前幾天比較穩定,后來A有點急事請假了,但服務器上的程序這時好像出現了問題,這時B只能使用自己的電腦調試、解決問題并試著發一個版本,但因為他平時做后端,對版本發布不是很熟悉,又搞了半天終于弄好了。項目上線了,穩定運行了半年,后來A、B先后離職了,新來的C負責維護這個項目,盡管A、B在離職前做了一些工作交接,但當C真正接手的時候才發現頭大,我檫居然注釋都沒寫,有沒有這么坑的,由于C開始硬著頭皮看代碼,發現代碼中各種飄逸寫法,各種為了臨時需求而打的補丁,C幾乎抓狂。

??? 以上的例子有點夸大,但或多或少都可能遇到過,我們需要一種規范來約束這個開發過程,使開發過程嚴格有序的進行。

從問題出發

就以上面這個例子,我們看其中暴露出了哪些問題:

1、團隊彼此協作不流暢,出現彼此阻塞的情況;

2、使用的類庫版本不統一,造成難以估計的風險;

3、代碼未經嚴格測試就上傳,造成不斷的返工;

4、版本發布規范欠缺,版本質量不能保證;

5、代碼質量低,其他人難以接手。

??? 團隊開發時,我們常常約定好彼此之間的接口規范,然后開始各自開發,開發完成后,按照接口規范對接起來,這是一個理想的流程,但現實往往不那么順利,問題常常在于,接口規范可能根據需求變化而經常變更,而且在實際對接時經常發現諸多問題。我們無法通過工具來解決這些問題,只能要求開發人員在制定接口規范時,為可能變更的需求多一些擴展,在開發時多考慮諸多素質,盡量將減少對接過程中的問題。下面將講述如何使用Maven和Nexus保證開發人員引用統一的類庫版本,以及如何將自己開發的模塊上傳至Nexus服務器,以提供給其他模塊引用。

關于Maven和Nexus的搭建在Maven實戰(Maven+Nexus建立私服【Linux系統】)中已經介紹過,在此介紹下主要步驟:

1、下載maven(讀:妹吻)和nexus(讀:耐克色兒絲):

http://maven.apache.org/download.cgi

http://nexus.sonatype.org/downloads/

2、將下載的nexus放置到linux服務器解壓并啟動:

?

cd /data/program/nexus-2.3.1-01/bin/jswll

選擇自己的系統并進入:

啟動nexus

./nexus start

nexus啟動成功,訪問:http://192.168.6.204:8081/nexus/

3、將下載的maven解壓放置在開發機上(windows),并配置conf目錄下的setting.xml文件:

(1)在<settings><profiles></profiles></settings>節點之間添加配置:

<profile>?<id>dev</id>?<repositories>?<repository>?<id>local-nexus</id>?<url>http://192.168.6.204:8081/nexus/content/groups/public/</url>?<releases><enabled>true</enabled>?</releases>?<snapshots>?<enabled>true</enabled>?</snapshots>?</repository>?</repositories>?</profile>

接著在<settings></settings>節點之間添加配置:

<activeProfiles>?<activeProfile>dev</activeProfile>?</activeProfiles>

以上配置好了連接Nexus私服。

(2)安裝eclipse的m2eclipse插件,并配置maven。

m2eclipse的安裝地址:http://m2eclipse.sonatype.org/sites/m2e(安裝過程略)

安裝完成后配置maven:

配置eclipse的maven為本地下載的maven地址。主要為了方便配置和版本管理。

至此,nexus和maven就搭建配置完成了,下面我們要利用這個環境解決兩個問題:

1、不同的模塊項目都使用統一的類庫版本;如spring都使用3.1.2.RELEASE,log4j都使用1.2.17。這樣避免因為jar包版本的不同,引發的諸多問題。

2、模塊開發完畢后,將編譯的庫文件發布到nexus私服上,以便其他模塊引用。

這里說一下maven的一個特性,繼承。簡單來說繼承就是先建立一個父項目,其他項目如果繼承這個父項目,就可以繼承這個項目定義的庫文件及版本。利用這個特性,我們可以讓多個模塊都繼承一個父項目,而在父項目中定義好類庫的版本,這樣所有模塊都使用統一的類庫文件。例如:

建立名為maven-parent的父項目,pom配置為:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.cnblogs.leefreeman</groupId> <artifactId>maven-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <properties> <!-- junit --> <junit.version>4.10</junit.version> <!-- servlet --> <servlet-api.version>2.5 </servlet-api.version> <!-- log4j --> <log4j.version>1.2.17 </log4j.version> <!-- commons.codec --> <commons.codec.version>1.7</commons.codec.version> <!-- maven-support --> <maven-support.version>0.0.1-SNAPSHOT</maven-support.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencyManagement> <dependencies> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <!-- log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <!-- commons包 --> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>${commons.codec.version}</version> </dependency> <!-- servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>${servlet-api.version}</version> <scope>provided</scope> </dependency> </dependencies> </dependencyManagement> </project>

這個pom定義了一些類庫以及它的版本。

然后再建立模塊項目:maven-sample(web項目)、maven-support(支撐模塊,包括一些工具類以及業務封裝,提供給maven-sample引用)。

maven-sample的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.cnblogs.leefreeman</groupId> <artifactId>maven-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>maven-sample</artifactId> <packaging>war</packaging> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </dependency> </dependencies> <build> <finalName>maven-sample</finalName> </build> </project>

maven-support的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.cnblogs.leefreeman</groupId> <artifactId>maven-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>maven-support</artifactId> <packaging>jar</packaging> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> </dependency> </dependencies> </project>

通過以上配置,maven-sample和maven-support引用的jar包,都會使用相同的版本:

接下來我們解決協作開發的問題,maven-support開發完畢之后,將之發布到nexus服務器,以便maven-sample可以引用。我們需要3步:

1、本地maven的conf目錄下的setting.xml,在<servers></servers>節點之間添加:

<server> <id>releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>snapshots</id> <username>admin</username> <password>admin123</password> </server>

2、在maven-support項目的pom.xml中,<project></project>節點之間添加:

<!-- 構件部署倉庫 --> <distributionManagement> <repository> <id>releases</id> <name>發布版本倉庫</name> <url>http://192.168.0.109:8081/nexus/content/repositories/releases/</url> </repository> <snapshotRepository> <id>snapshots</id> <name>快照版本倉庫</name> <url>http://192.168.0.109:8081/nexus/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement>

3、對maven-support項目進行編譯,并執行發布命令:

可以看到maven-support已經成功發布到nexus私服中:

這樣maven-sample就可以引用maven-support模塊,而開發maven-support的人則可以繼續開發,持續發布新版本。

小結

??? 本文主要介紹maven和nexus的環境搭建,以及怎么使用maven和nexus統一管理庫文件和版本,怎么講自己的模塊上傳至nexus私服,供其他模塊引用。這樣我們基本解決了兩個問題:

1、團隊彼此協作不流暢,出現彼此阻塞的情況;

2、使用的類庫版本不統一,造成難以估計的風險;

下一篇將使用jenkins、svn、tomcat以及sonar解決自動化測試、自動化版本發布、代碼質量檢查等問題。

http://www.cnblogs.com/leefreeman/p/4211530.html

前言

??? 上一篇隨筆Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持續集成環境(一)介紹maven和nexus的環境搭建,以及如何使用maven和nexus統一管理庫文件和版本,以及怎么將自己的模塊上傳至nexus私服,供其他模塊引用。下面將主要介紹如何利用Jenkins、SVN、Tomcat以及Sonar來完成項目的自動化編譯、測試和發布,以及檢查項目的代碼質量。

利器Jenkins

??? Jenkins源于另外一個持續集成工具Hudson,Hudson在oracle收購sun之前,是開源社區在開發和維護,oracle收購sun之后聲明擁有hudson的商標使用權,后來開發hudson的開源力量只能重新起個名字“Jenkins”來繼續開發,原Hudson則由oracle持續維護,但更新速度比較慢。

jenkins地址:http://jenkins-ci.org/

hudson地址:http://hudson-ci.org/

可以看到hudson官網右下角oracle的版權logo。我們這里就使用Jenkins來搭建持續集成環境。

首先從官方上下載jenkins,http://mirrors.jenkins-ci.org/war/?可以選擇不同的版本。下載完成后放置在服務器某個目錄下,cd到該目錄下,執行:

java -jar jenkins.war

jenkins內置一個jetty容器,默認使用8080端口,如果你的8080被占用了,請執行:

java -jar jenkins.war --httpPort=8081

?

當然你也可以直接把war包放到tomcat目錄下啟動,這樣jenkins就啟動起來了。

來到這個界面我們先做一個事情:系統配置,主要是配置maven和發布插件。

1、進入“系統管理”——>“系統設置”:

新增maven,將linux上安裝好的maven配置上去。

其他保持默認配置,保存!

2、進入“系統管理”——>“管理插件”——>“高級”上傳插件

上傳完成之后,jenkins就具備了發布web應用到tomcat各類容器的能力。

注:deploy.hpi插件是我事先從網上下載好了,你也可以使用jenkins自帶的插件安裝功能完成插件安裝,但那個比較慢。

3、配置linux服務器上的maven,跟上篇類似你也需要配置linux服務器上的maven,使之連接到nexus私服,以及支持發布模塊到nexus上。

在<settings><servers></servers></settings>節點之間添加:

1: <server> 2: <id>snapshots</id> 3: <username>deployment</username> 4: <password>123456</password> 5: </server> 6: <server> 7: <id>releases</id> 8: <username>deployment</username> 9: <password>123456</password> 10: </server>

在<settings></settings>節點之間添加:

1: <profiles> 2: <profile> 3: <id>dev</id> 4: <repositories> 5: <repository> 6: <id>local-nexus</id> 7: <url>http://192.168.0.109:8081/nexus/content/groups/public/</url> 8: <releases> 9: <enabled>true</enabled> 10: </releases> 11: <snapshots> 12: <enabled>true</enabled> 13: </snapshots> 14: </repository> 15: </repositories> 16: </profile> 17: </profiles> 18: ? 19: <!-- activeProfiles | List of profiles that are active for all builds. | --> 20: <activeProfiles> 21: <activeProfile>dev</activeProfile> 22: </activeProfiles>

?

完成這些配置,我們就可以在jenkins上新建項目了。

我們事先在eclipse中開發的三個項目:maven-parent(父項目,用于統一類庫版本)、maven-support(后端模塊,支撐web項目)、maven-sample(web項目,依賴maven-support),依次來添加:

下一步進入后,主要配置兩個地址,svn和maven命令。

根據提示進行SVN用戶名、密碼認證即可。

對于maven-parent項目,我們執行install命令即可。保存!

接著創建maven-support項目,由于該項目是后端模塊,需要發布到nexus服務器上,所以稍有不同:

這里需要執行deploy命令,將該項目發布到nexus上。另外你最好配置該項目構建在maven-paremt執行之后開始:

最好保存!

最好創建maven-sample項目,這是個web項目,配置又稍有不同:

執行package命令將項目打包成war包。下面做最重要的事情:將打包后的war包自動發布到tomcat下:

注意幾點:

1、WAR/EAR files,一定要填寫相對地址;

2、Manager username、Manager password是你安裝的tomcat用戶名、密碼,如果沒有請通過tomcat的配置文件tomcat-users.xml設置。

3、tomcat url為你安裝的tomcat訪問地址。

最后還是設置下構建順序,讓它在maven-support執行完成之后構建:

保存!

jenkins首頁上就出現了三個我們創建好的項目,我們只需要構建maven-parent就可以了,因為我們設置了構建順序:

查看構建信息,可以看到構建的進程,項目先從svn更新下來,然后進行編譯,運行測試用例,打包,發布的過程。整個過程都由jenkins完成,

至此jenkins就實現了自動化編譯、測試(自己寫測試用例)、打包發布、部署。

可以看到tomcat上已經多了maven-sample應用。

部署Sonar

從http://www.sonarqube.org/官網上下載sonar安裝包,解壓到系統目下,進入到bin目錄下,選擇你的系統版本,進入后執行:

./sonar.sh start

?

sonar就啟動起來了,默認的端口是9000,你也可以到conf/sonar.properties配置文件中修改:

sonar.web.port: 8066

?

在Jenkins安裝sonar插件

和安裝deploy插件方法類似,我們在系統管理——插件管理中,上傳sonar插件。安裝完成之后,請重啟jenkins。

配置jenkins的sonar插件:

進入系統配置

根據你的情況配置sonar,我這里僅僅修改過sonar的應用端口,所以只需要配置這個,其他保留默認值。

進入特定項目配置sonar:

選擇下maven版本,其他保留默認值。保存!

然后開始構建項目,構建完成后,可以看到該項目的代碼檢查結果已經被導入到sonar平臺上,通過sonar系統就可以方便查看該項目的代碼質量情況:

sonar可以檢查代碼的復雜度、代碼重復、單元測試覆蓋率、是否有注釋、潛在bug等代碼問題,對于sonar的項目介紹,可以進一步去研究摸索,在這里僅介紹jenkins和sonar整合的方法,可以再實際工作時進一步研究。

小結

??? 本文主要介紹如何搭建jenkins以及怎么利用maven、deploy插件打包、發布你的項目,最后使用jenkins和sonar配合進行項目的代碼質量檢查。完成整個過程我們可以發現,以往的測試、打包、發布、代碼檢查的工作都可以由人工轉化工具來完成,讓程序員的寶貴時間集中在開發上。回過頭看Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持續集成環境(一)開頭的故事,我們可能會有不同的想法。

http://www.cnblogs.com/leefreeman/p/4226978.html

?

總結

以上是生活随笔為你收集整理的使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。