Jenkins中使用Git和Maven之多個項目
1.應用Aggregation管理多個子項目
Maven中有一個Aggregation(聚合),可以將多個項目作為模塊添加到一個pom.xml中,然后告訴Jenkins這個頂層pom.xml,就可以自動從Git中拿出這些項目的源代碼,并build所有的子項目和運行相應的測試程序。我這里使用的是TestNG。
比如我有兩個maven項目client和email_sender,我希望一次編譯并測試,在這兩個項目文件夾之上的目錄上添加一個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>
- <groupId>com.kaimei.datacenter</groupId>
- <artifactId>cml</artifactId>
- <version>2.0</version>
- <packaging>pom</packaging>
- <modules>
- <module>client</module>
- <module>email_sender</module>
- </modules>
- </project>
然后只要告訴Jenkins中這個pom.xml的路徑即可。點擊build now進行測試,可以看到兩個子項目都已經被下載源代碼和編譯,運行了TestNG的測試程序。
注意module名稱應該是子項目的目錄名。
2.多個項目之間的依賴關系管理
client和email_sender項目在上例中沒有關聯關系,為了演示持續集成在依賴樹的build管理,現在建立一個新的maven項目名叫mongo_utility,這個項目提供了一個類DBManager封裝了MongoDB的連接,代碼來源于我的另一篇文章:http://blog.csdn.net/sheismylife/article/details/7090526
client項目和email_sender項目都通過DBManager類來和MongoDB建立連接。因此它們的pom.xml中都有這一段:
- <dependency>
- <groupId>com.kaimei.datacenter</groupId>
- <artifactId>mongo_utility</artifactId>
- <version>1.0</version>
- </dependency>
build成功。仔細看Console Output,Jenkins的行為和直接使用mvn clean compile不太一樣。Jenkins會將mongo_utility的源代碼取出來,然后重新編譯,安裝到本地倉庫,然后再編譯其他兩個工程。如果直接敲mvn clean compile的話,mongo_utility-1.0.jar會直接從私服上下載然后安裝,不會編譯。
3.多個項目共享相同的設置
client,email_sender和mongo_utility三個項目都用到了mongodb java library,為了便于管理,沒有必要讓它們各自的pom.xml中都定義相同的dependency。Maven將每個項目的pom.xml看作一個工程對象,通過繼承可以讓它們共享同一個配置。
在頂層的pom.xml中添加mongodb依賴:
- <dependencies>
- <dependency>
- <groupId>org.mongodb</groupId>
- <artifactId>mongo-java-driver</artifactId>
- <version>2.7.2</version>
- </dependency>
- </dependencies>
然后在client,mongo_utility和email_sender項目的pom.xml中分別刪除上面的依賴,并添加如下配置:
- <parent>
- <groupId>com.kaimei.datacenter</groupId>
- <artifactId>cml</artifactId>
- <version>1.0</version><!-- or whatever version you use -->
- <relativePath>../pom.xml</relativePath>
- </parent>
然后測試,大功告成。
4.模塊部署到nexus服務器上
如果想將某個模塊項目比如這里的mongo_utility項目部署到nexus服務器上,需要調整頂層目錄的pom.xml,加上下面的配置:
- <distributionManagement>
- <repository>
- <id>sheismylife</id>
- <url>http://S1:8081/nexus/content/repositories/sheismylife</url>
- </repository>
- </distributionManagement>
但是這樣三個模塊項目都自動繼承了deploy功能。其實我只想mongo-utility模塊部署到nexus上,暫時把問題放在這里吧。
然后在頂層目錄上執行mvn clean deploy,一切順利。將代碼提交到git倉庫中,然后修改Jenkins的項目配置頁面,添加clean deploy命令。
點擊Build Now按鈕,看看結果,一切OK.值得一提的是,如果你通過mvn命令行執行正確,而通過Jenkins執行錯誤,重新啟動一下Jenkins服務,或許能解決。我已經碰到幾次了,似乎Jenkins有bug.
5.通過Jenkins將web項目部署到Glassfish或者Tomcat
基本做法還是通過Maven項目的plugin來完成部署。有一個問題是如果web項目和其他幾個項目都作為一個大項目的模塊被聚合在一起,而且都繼承某個parent pom.xml,那么如何用一個Maven命令就能編譯所有的模塊,部署到nexus私服,而且將web項目發布到Glassfish或者Tomcat上。還正在研究,希望能夠夠通過Maven來實現這個功能。
6.一個Jenkins上的多個project之間的順序執行
這個很簡單,Jenkins的project配置里面可以設置在某個project之后build,或者在本project build之后build other project.
7.多個Jenkins之間的遠程調用
S1上的Jenkins A調用某個shell腳本,比如curl http://S2/job/test/build
S2上的Jenkins B的test project就會被觸發
原文鏈接:http://blog.csdn.net/sheismylife/article/details/7214683
【編輯推薦】