Jenkins中使用Git和Maven之多个项目
2016-09-29 19:25
323 查看
1.应用Aggregation管理多个子项目
Maven中有一个Aggregation(聚合),可以将多个项目作为模块添加到一个pom.xml中,然后告诉Jenkins这个顶层pom.xml,就可以自动从Git中拿出这些项目的源代码,并build所有的子项目和运行相应的测试程序。我这里使用的是TestNG。
比如我有两个maven项目client和email_sender,我希望一次编译并测试,在这两个项目文件夹之上的目录上添加一个pom.xml,内容如下:
然后只要告诉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中都有这一段:
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依赖:
[html] view
plain copy
<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中分别删除上面的依赖,并添加如下配置:
[html] view
plain copy
<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,加上下面的配置:
[html] view
plain copy
<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就会被触发
来个复杂的例子,Jenkins A调用JenkinsB 并传递参数,参数必须是json格式,因此根据curl的语法,应该写成这样:
[html] view
plain copy
curl http://10.112.18.110:8080/jenkins/job/upland-install/build -d token=zorn --data-ascii json="{'parameter':[{'name':'number','value':${BUILD_NUMBER}}]}"
而Jenkins B项目中,选择This build is parameterized
然后设置参数名称和默认值。之后用%number%的形式引用参数。
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依赖:
[html] view
plain copy
<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中分别删除上面的依赖,并添加如下配置:
[html] view
plain copy
<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,加上下面的配置:
[html] view
plain copy
<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就会被触发
来个复杂的例子,Jenkins A调用JenkinsB 并传递参数,参数必须是json格式,因此根据curl的语法,应该写成这样:
[html] view
plain copy
curl http://10.112.18.110:8080/jenkins/job/upland-install/build -d token=zorn --data-ascii json="{'parameter':[{'name':'number','value':${BUILD_NUMBER}}]}"
而Jenkins B项目中,选择This build is parameterized
然后设置参数名称和默认值。之后用%number%的形式引用参数。
相关文章推荐
- Jenkins中使用Git和Maven之多个项目
- Jenkins中使用Git和Maven之多个项目
- Jenkins中使用Git和Maven之多个项目
- 使用Jenkins自动编译我的 java 项目 git maven jenkins
- 使用Jenkins持续集成maven项目
- 使用Jenkins配置自动化构建maven项目
- 使用Jenkins配置Git+Maven的自动化构建
- Eclipse下使用git向一个分支同时推送多个项目
- 使用eclipse调试git java maven项目
- 持续集成工具集之四 Jenkins+Maven+Git+Tomcat 项目构建和自动部署
- 自动化集成项目 jenkins+git+maven+tomcat
- Linux下的Jenkins+Tomcat+Maven+Git+Shell环境的搭建使用(jenkins自动化部署)
- Maven实现多个项目关联自动化构建(maven-invoker-plugin插件的使用)
- 使用Jenkins配置Git+Maven的自动化构建
- 使用Jenkins实现maven项目一键部署
- Jenkins+git+Maven项目
- Jenkins自动发布Git,Maven项目
- 使用Jenkins启动maven作为项目构建管理工具的web项目
- 使用Jenkins启动maven作为项目构建管理工具的web项目
- 使用Jenkins启动maven作为项目构建管理工具的web项目