自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Jenkins中使用Git和Maven之多個(gè)項(xiàng)目

開(kāi)發(fā) 后端
Maven中有一個(gè)Aggregation(聚合),可以將多個(gè)項(xiàng)目作為模塊添加到一個(gè)pom.xml中,然后告訴Jenkins這個(gè)頂層pom.xml,就可以自動(dòng)從Git中拿出這些項(xiàng)目的源代碼,并build所有的子項(xiàng)目和運(yùn)行相應(yīng)的測(cè)試程序。我這里使用的是TestNG。

1.應(yīng)用Aggregation管理多個(gè)子項(xiàng)目

Maven中有一個(gè)Aggregation(聚合),可以將多個(gè)項(xiàng)目作為模塊添加到一個(gè)pom.xml中,然后告訴Jenkins這個(gè)頂層pom.xml,就可以自動(dòng)從Git中拿出這些項(xiàng)目的源代碼,并build所有的子項(xiàng)目和運(yùn)行相應(yīng)的測(cè)試程序。我這里使用的是TestNG。

比如我有兩個(gè)maven項(xiàng)目client和email_sender,我希望一次編譯并測(cè)試,在這兩個(gè)項(xiàng)目文件夾之上的目錄上添加一個(gè)pom.xml,內(nèi)容如下:

  1. <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"> 
  2.   <modelVersion>4.0.0</modelVersion> 
  3.  
  4.   <groupId>com.kaimei.datacenter</groupId> 
  5.   <artifactId>cml</artifactId> 
  6.   <version>2.0</version> 
  7.   <packaging>pom</packaging> 
  8.  
  9.   <modules> 
  10.     <module>client</module> 
  11.     <module>email_sender</module> 
  12.   </modules> 
  13. </project> 

然后只要告訴Jenkins中這個(gè)pom.xml的路徑即可。點(diǎn)擊build now進(jìn)行測(cè)試,可以看到兩個(gè)子項(xiàng)目都已經(jīng)被下載源代碼和編譯,運(yùn)行了TestNG的測(cè)試程序。

注意module名稱(chēng)應(yīng)該是子項(xiàng)目的目錄名。

2.多個(gè)項(xiàng)目之間的依賴(lài)關(guān)系管理

client和email_sender項(xiàng)目在上例中沒(méi)有關(guān)聯(lián)關(guān)系,為了演示持續(xù)集成在依賴(lài)樹(shù)的build管理,現(xiàn)在建立一個(gè)新的maven項(xiàng)目名叫mongo_utility,這個(gè)項(xiàng)目提供了一個(gè)類(lèi)DBManager封裝了MongoDB的連接,代碼來(lái)源于我的另一篇文章:http://blog.csdn.net/sheismylife/article/details/7090526

client項(xiàng)目和email_sender項(xiàng)目都通過(guò)DBManager類(lèi)來(lái)和MongoDB建立連接。因此它們的pom.xml中都有這一段:

  1. <dependency> 
  2.   <groupId>com.kaimei.datacenter</groupId> 
  3.   <artifactId>mongo_utility</artifactId> 
  4.   <version>1.0</version>        
  5. </dependency> 

build成功。仔細(xì)看Console Output,Jenkins的行為和直接使用mvn clean compile不太一樣。Jenkins會(huì)將mongo_utility的源代碼取出來(lái),然后重新編譯,安裝到本地倉(cāng)庫(kù),然后再編譯其他兩個(gè)工程。如果直接敲mvn clean compile的話,mongo_utility-1.0.jar會(huì)直接從私服上下載然后安裝,不會(huì)編譯。

3.多個(gè)項(xiàng)目共享相同的設(shè)置

client,email_sender和mongo_utility三個(gè)項(xiàng)目都用到了mongodb java library,為了便于管理,沒(méi)有必要讓它們各自的pom.xml中都定義相同的dependency。Maven將每個(gè)項(xiàng)目的pom.xml看作一個(gè)工程對(duì)象,通過(guò)繼承可以讓它們共享同一個(gè)配置。

在頂層的pom.xml中添加mongodb依賴(lài):

  1. <dependencies> 
  2.   <dependency> 
  3.     <groupId>org.mongodb</groupId> 
  4.     <artifactId>mongo-java-driver</artifactId> 
  5.     <version>2.7.2</version> 
  6.   </dependency> 
  7. </dependencies> 

然后在client,mongo_utility和email_sender項(xiàng)目的pom.xml中分別刪除上面的依賴(lài),并添加如下配置:

  1. <parent> 
  2.   <groupId>com.kaimei.datacenter</groupId> 
  3.   <artifactId>cml</artifactId> 
  4.   <version>1.0</version><!-- or whatever version you use --> 
  5.   <relativePath>../pom.xml</relativePath> 
  6. </parent> 

然后測(cè)試,大功告成。

4.模塊部署到nexus服務(wù)器上

如果想將某個(gè)模塊項(xiàng)目比如這里的mongo_utility項(xiàng)目部署到nexus服務(wù)器上,需要調(diào)整頂層目錄的pom.xml,加上下面的配置:

  1. <distributionManagement> 
  2.   <repository> 
  3.     <id>sheismylife</id> 
  4.     <url>http://S1:8081/nexus/content/repositories/sheismylife</url> 
  5.   </repository> 
  6. </distributionManagement> 

但是這樣三個(gè)模塊項(xiàng)目都自動(dòng)繼承了deploy功能。其實(shí)我只想mongo-utility模塊部署到nexus上,暫時(shí)把問(wèn)題放在這里吧。

然后在頂層目錄上執(zhí)行mvn clean deploy,一切順利。將代碼提交到git倉(cāng)庫(kù)中,然后修改Jenkins的項(xiàng)目配置頁(yè)面,添加clean deploy命令。

點(diǎn)擊Build Now按鈕,看看結(jié)果,一切OK.值得一提的是,如果你通過(guò)mvn命令行執(zhí)行正確,而通過(guò)Jenkins執(zhí)行錯(cuò)誤,重新啟動(dòng)一下Jenkins服務(wù),或許能解決。我已經(jīng)碰到幾次了,似乎Jenkins有bug.

5.通過(guò)Jenkins將web項(xiàng)目部署到Glassfish或者Tomcat

基本做法還是通過(guò)Maven項(xiàng)目的plugin來(lái)完成部署。有一個(gè)問(wèn)題是如果web項(xiàng)目和其他幾個(gè)項(xiàng)目都作為一個(gè)大項(xiàng)目的模塊被聚合在一起,而且都繼承某個(gè)parent pom.xml,那么如何用一個(gè)Maven命令就能編譯所有的模塊,部署到nexus私服,而且將web項(xiàng)目發(fā)布到Glassfish或者Tomcat上。還正在研究,希望能夠夠通過(guò)Maven來(lái)實(shí)現(xiàn)這個(gè)功能。

6.一個(gè)Jenkins上的多個(gè)project之間的順序執(zhí)行

這個(gè)很簡(jiǎn)單,Jenkins的project配置里面可以設(shè)置在某個(gè)project之后build,或者在本project build之后build other project.

7.多個(gè)Jenkins之間的遠(yuǎn)程調(diào)用

S1上的Jenkins A調(diào)用某個(gè)shell腳本,比如curl http://S2/job/test/build

S2上的Jenkins B的test project就會(huì)被觸發(fā)

原文鏈接:http://blog.csdn.net/sheismylife/article/details/7214683

【編輯推薦】

  1. Java Bean屬性命名規(guī)范問(wèn)題分析
  2. Java Socket編程:初識(shí)TCP Socket
  3. Java Socket編程:如何識(shí)別網(wǎng)絡(luò)主機(jī)
  4. Java Socket編程:基本的術(shù)語(yǔ)和概念
  5. Java集合類(lèi)ArrayList循環(huán)中刪除特定元素
責(zé)任編輯:林師授 來(lái)源: sheismylife的博客
相關(guān)推薦

2012-03-13 14:33:55

JavaJenkinsgit

2010-05-25 16:39:56

SVN中使用Git

2024-10-06 13:41:25

2014-03-19 10:01:16

Git項(xiàng)目遠(yuǎn)端倉(cāng)庫(kù)

2021-07-26 05:21:37

JenkinsAndroid自動(dòng)化

2010-05-25 16:52:39

SVN中使用Git

2015-08-03 11:45:37

storyboard

2022-02-14 06:35:26

git參數(shù)Jenkins開(kāi)發(fā)

2021-01-05 20:24:04

Git開(kāi)源軟件開(kāi)發(fā)

2009-07-21 17:27:12

UpdateProgrASP.NET AJA

2020-09-17 06:00:21

Git

2022-10-11 16:53:22

GitLinux

2023-09-25 10:02:00

GitVS Code

2009-06-24 17:34:58

使用JSF的經(jīng)驗(yàn)

2022-06-01 14:35:39

gitjmeter腳本

2020-10-27 07:31:35

GitGit RevertGit Reset

2021-09-02 14:32:25

企業(yè)項(xiàng)目開(kāi)發(fā)

2023-11-30 09:00:00

TypeScript開(kāi)發(fā)

2015-01-26 09:57:47

GradleMaven Centr

2020-12-11 22:16:34

Git遠(yuǎn)程倉(cāng)庫(kù)Linux
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)