Jenkins CI服务器搭建及Maven私服Nexus
1.4:Jenkins插件checkstyle、findbug安装1
一:Jenkins持续集成(CI)
1.1:Jenkins简介及特性
1、只维护一个源码仓库
2、自动化build
3、让build自行测试
4、每人每天都要向mainline提交代码
5、每次提交都应在集成计算机上重新构建mainline
6、保持快速build
7、在模拟生产环境中进行测试
8、让每个人都能轻易获得最新的可执行文件
9、每个人都能看到进度
10、自动化部署
1.2:Jenkins安装
1、 Jenkins 下载
Jenkins 下载网址:http://jenkins-ci.org/
2、 Jenkins 安装
(1) 安装JDK
解压下载的JDK:tar zxvf jdk-7u55-linux-x64.gz
/home/admin下面:cp -r jdk1.7.0_55/ /opt/java7
设置环境变量:
修改/etc/profile文件
export JAVA_HOME=/opt/java7/jdk1.7.0_55
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
使环境变量生效:
# source /etc/profile
(2) 部署安装Tomcat
Tomcat下载:http://tomcat.apache.org/download-70.cgi
Tomcat安装:
a) 解压
# tar zxvf apache-tomcat-7.0.54.zip
b) 移动到其他目录
# mv apache-tomcat-7.0.55 /opt/tomcat-ci
(3)Linux 搭建安装Maven
Maven下载:apache-maven-3.2.1-bin.tar.gz
安装:
#tar -zxvf apache-maven-3.2.1-bin.tar.gz
#mv apache-maven-3.2.1 /opt/maven
#vim /etc/profile
添加下面内容:
#maven
M2_HOME=/opt/maven/apache-maven-3.2.1
PATH=$PATH:$M2_HOME/bin
export M2_HOME PATH
然后使环境变量生效:
#source /etc/profile
输入#mvn -v验证是否成功。
(4) 拷贝下载的 jenkins.war 到 tomcat的webapps目录下:
sudo cp jenkins.war /opt/tomcat-ci/apache-tomcat-7.0.54/webapps/
(5) 启动Tomcat服务
# cd /opt/tomcat-ci/apache-tomcat-7.0.54/bin
# ./startup.sh
Jenkins 验证
在浏览器里,输入网址: http://localhost:8080/jenkins/ 显示下面界面:
1.3:配置
1、系统配置
在系统配置里面配置好相关环境,有如下:
JDK:
Maven:
保存:
2、新建JOB(工程)
保存,就跳到该job(om)的配置管理了,把一下相关配置。
1、构建天数
2、源码管理
项目svn路径,首次使用的时候,系统会提示输入SVN账号密码,我这已经保存了账号这个就不演示了。
3、构建配置
下面还有邮件告警,不使用直接保存即可。
4、进入job,构建项目
点击构建进度条,进入构建详细页面,点击Console Output
直到。。。
1.3:Jenkins 插件checkstyle、findbug安装
Checkstyle安装:
1、在JOB配置中勾选,可以在左侧导航显示
2、Checkstyle安装:系统管理——》插件管理
3、重启
4、配置项目pom.xml文件
<checkstyle.config.location>/opt/google-checkstyle.xml</checkstyle.config.location>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.9.1</version>
</plugin>
5、在job中配置
6、构建项目,验证
到这步就能看到checkstyle信息完成。
FindBug安装:
1、FindBug安装:系统管理——》插件管理
安装和checkstyle一样,完成重启
2、配置pom.xml
在
<build>
<plugins>
..
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<!-- <configLocation>${basedir}/springside-findbugs.xml</configLocation> -->
<threshold>High</threshold>
<effort>Default</effort>
<findbugsXmlOutput>true</findbugsXmlOutput>
<!-- findbugs xml输出路径--> <findbugsXmlOutputDirectory>target/site</findbugsXmlOutputDirectory>
</configuration>
</plugin>
..
<plugins>
</build>
3、验证
1.4:Jenkins自动部署
1、项目管理 --> 插件管理 -->选择可选插件--> 搜索 deploy
版本有些版本可能插件名字是:Deploy Plugin
安装就可以了。安装如图:
这个插件的作用 就是 当项目做构建 无误 的时候,自动上传项目到指定的服务器上。我们这里是使用Tomcat
2、因为自动部署需要登录tomcat权限,所以修改 tomcat 目录下的 conf 下的 tomcat-user.xml 添加:
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<user password="tomcat" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui" username="tomcat"/>
3、在项目job配置中配置远程tomcat服务器连接
到此完成构建的时候上传到了 tomcat 的服务器下
二:Maven私服Sonatype Nexus
2.1:Nexus简介
Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库 下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架设一个Maven仓库服务器,在代理远程仓库的同时维护本地仓库,以节省带宽和时间,Nexus就可以满足这样的需要。此外,他还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。这些优点使其日趋成为最流行的Maven仓库管理器。
2.2:Nexus安装
1、下载 我们可以在nexus的官网
上找到它的相关介绍,下载地址是: http://nexus.sonatype.org
,在这里可以找到最新的版本,如果需要以前的版本,在官网上应该也可以找到下载地址。我下载的是:nexus-oss-webapp-1.8.0-bundle.tar.gz
。关于Nexus的详细使用方法可以参照:Repository Management with Nexus
2、安装
解压下载的文件:
# tar xzvf nexus-oss-webapp-1.8.0-bundle.tar.gz
解压后会在同级目录中,出现两个文件夹:nexus-oss-webapp-1.8.0和sonatype-work,前者包含了nexus的运行环境和应用程序,后者包含了你自己的配置和数据。
3、启动nexus
在上面的提到,nexus的运行环境在nexus-oss-webapp-1.8.0目录,下面就进入这个目录启动: #cd nexus-oss-webapp-1.8.0/bin/jsw/linux-x86-64/
在这个目录下包含了一个文件夹和三个文件:lib、nexus、platform和wrapper,其中nexus就是启动命令。
进入bin目录,查看nexus是否启动
# ./nexus
执行上面的命令,可以得到nexus命令的用法提示:start 命令启动,stop命令停止。
下面启动nexus:
从控制台输出可以看到Nexus已经启动成功,有时候不一定起来了,验证一下
我们可以通过log文件查看更详细的信息:
# tail -f wrapper.log
在log中可以看到nexus默认监听的端口是8081。
访问Nexus :http://192.168.1.159:8081/nexus
在左边菜单栏里选择Repositories,然后会出现右边的画面,右边上半部分是列出来的repository,黑体字是类型为group的repository. 这里简单介绍下几种repository的类型:
· hosted,本地仓库,通常我们会部署自己的构件到这一类型的仓库。比如公司的第二方库。
· proxy,代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库。
· group,仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用资源时就不需要多次引用了,只需要引用一个group即可。
类型为hosted的为本地仓库,Nexus预定义了3个本地仓库,分别是Releases, Snapshots, 3rd Party. 分别讲一下这三个预置的仓库都是做什么用的:
· Releases: 这里存放我们自己项目中发布的构建, 通常是Release版本的, 比如我们自己做了一个FTP Server的项目, 生成的构件为ftpserver.war, 我们就可以把这个构建发布到Nexus的Releases本地仓库. 关于符合发布后面会有介绍.
· Snapshots: 这个仓库非常的有用, 它的目的是让我们可以发布那些非release版本, 非稳定版本, 比如我们在trunk下开发一个项目,在正式release之前你可能需要临时发布一个版本给你的同伴使用, 因为你的同伴正在依赖你的模块开发, 那么这个时候我们就可以发布Snapshot版本到这个仓库, 你的同伴就可以通过简单的命令来获取和使用这个临时版本.
· 3rd Party: 顾名思义, 第三方库, 你可能会问不是有中央仓库来管理第三方库, 这里的是指可以让你添加自己的第三方库, 比如有些构件在中央仓库是不存在的. 比如你在中央仓库找不到Oracle 的JDBC驱动, 这个时候我们就需要自己添加到3rd party仓库.
仓库组的概念是Maven没有的,通过前面介绍可以了解到, 我们可以建立多个proxy代理仓库,hosted本地仓库, 如果没有仓库组的概念,我们如果需要引用这些仓库的是时候需要一一加入到我们的setting.xml里面去, 有了仓库的组的概念, 我们只需要做一次引用就可以了,把我们需要的仓库加入到仓库组即可,像我们会使用url:
<url>http://127.0.0.1:8081/nexus/content/groups/public/</url>
2.3:配置
1、要管理Nexus,你首先需要以管理员身份登陆,点击界面右上角的login,输入默认的登录名和密码:admin/admin123,登陆成功后,你会看到左边的导航栏增加了很多内容
这里,可以管理仓库,配置Nexus系统,管理任务,管理用户,角色,权限,查看系统的RSS源,管理及查看系统日志,等等。你会看到Nexus的功能十分丰富和强大,本文,笔者只介绍一些最基本的管理和操作。
点击Repositories将会看到如下界面,其中红色框的三个库是我们配置自己maven的主要原因
2、打开以下三个代理仓库的自动下载功能,Nexus默认是关闭的
打开下载设置Download Remote Indexes 为 True
3、公共仓库聚合配置
保存配置。
5、配置Maven与Nexus的之间关系。
build构建部署构件到Nexus,pom.xml文件中添加:
<project>
...
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Release Repository</name>
<url>http://192.168.1.159:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://192.168.1.159:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
...
</project>
添加Maven setting.xml文件:
<!-- 上传构建到nexus时候需要登录权限 -->
<servers>
...
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
...
</servers>
<!-- 配置Nexus仓库镜像 -->
<mirros>
...
<mirror>
<id>nexus-mirror</id>
<name>Nexus Public Mirror</name>
<url>http://192.168.1.159:8081/nexus/content/groups/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
...
</mirrors>
<!-- 配置远程仓库-->
<profiles>
<profile>
<id>nexus-profile</id>
<activation>
<jdk>[1.4,1.7]</jdk>
</activation>
<repositories>
<repository>
<id>nexus</id>
<name>local private nexus</name>
<!--<url>http://maven.oschina.net/content/groups/public/</url>-->
<url>http://192.168.1.159:8081/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>local private nexus</name>
<!--<url>http://maven.oschina.net/content/groups/public/</url>-->
<url>http://192.168.1.159:8081/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<!-- 激活nexus-profile -->
<activeProfiles>
<activeProfile>nexus-profile</activeProfile>
</activeProfiles>
到这里配置结束,测试 构建上传。在eclipse中使用maven deploy命令
控制台:
仓库:
6、Eclipse本地仓库不存在的jar在构建过程通过Nexus自动下载jar
7、手动上传外部第三方jar。
有些时候我们需要部署构件到Nexus的3rd party, 比如我们在中央仓库找不到我们需要的构件, 我们可以通过Nexus的UI来上传构件:
点击左边菜单栏的 Repositories, 然后点击右边界面的3rd party, 选择界面下方的Artifact Upload, 这个时候出现以下界面:
Group: 、Artifact:、Version:,与pom.xml中的版本信息一一对应,选择select artifact (jar文件)提交即可。在该仓库中即可看到jar包。
上传构件需要两个步骤,一个是定义文件的上传,再就是构件的实体文件.
第一部分定义文件可以是POM文件, 这也是比较推荐的方式, 如果没有pom文件,可以选择以参数的形式输入.第二部分是上传构件的实体文件,这里简单说一下Classifier和Extension, 这两个都是选填相, Classifier用来区别同功能的构件用于不同的场景, 比如这个构件是分别针对JDK14和JDK15做了2个功能一样的Jar, 这个时候你就需要指定这个构件的Classifier为JDK14还是JDK15. Extension是指扩展名,如果不提供,那么会自动取这个构件的Packaging Type作为扩展名, 比如 ear, jar, war 等等. (Packaging Type是在第一步中通过pom文件或者手工输入得到的)刚才说了3rd party的部署, 关于releases 和 snapshots的UI部署也是一样的操作过程.我们之前也讲过, 这里的releases和snapshots是用来部署我们自己的项目构件的, 通过UI部署是可以,但是不是最高效的, 我们可以通过配置Maven来自动部署我们的项目构件,这也是我们建立自己的仓库的一个非常重要的原因, 下面就让我们看看如何配置:首先需要在POM文件中加入以下代码(参考上面配置部分,pom.xml配置远程仓库地址):
<project>
…
<distributionManagement>
<repository>
<id> nexus-releases</id>
<name> Nexus Release Repository</name>
<url>http://192.168.1.159:8081/nexus/content/groups/public</url>
</repository>
<snapshotRepository>
<id> nexus-snapshots</id>
<name> Nexus Snapshot Repository</name>
<url>http://192.168.1.159:8081/nexus/content/groups/public</url> </snapshotRepository>
</distributionManagement>
…
</project>
8、验证
8.1、打包
job配置的Goals and options中使用: install
8.2、发布版本到nexus
job配置的Goals and options中使用: deploy
<!--EndFragment-->