持续集成
1. 介绍
-
简介
持续集成,Continuous integration ,简称CI。
随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火,如何能再不断变化的需求中快速适应和保证软件的质量也显得尤其的重要。
持续集成正是针对这一类问题的一种软件开发实践。它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。 -
特点
- 它是一个自动化的周期性的集成测试过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,无需人工干预;
- 需要有专门的集成服务器来执行集成构建;
- 需要有代码托管工具支持;
-
作用
- 保证团队开发人员提交代码的质量,减轻了软件发布时的压力;
- 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量;
2. Jenkins介绍
- 易安装:仅仅一个 java -jar jenkins.war,从官网下载该文件后,直接运行,无需额外的安装,更无需安装数据库;
- 易配置:提供友好的GUI配置界面;
- 变更支持:Jenkins能从代码仓库(Subversion/CVS)中获取并产生代码更新列表并输出到编译输出信息中;
- 支持永久链接:用户是通过web来访问Jenkins的,而这些web页面的链接地址都是永久链接地址,因此,你可以在各种文档中直接使用该链接;
- 集成E-Mail/RSS/IM:当完成一次集成时,可通过这些工具实时告诉你集成结果(据我所知,构建一次集成需要花费一定时间,有了这个功能,你就可以在等待结果过程中,干别的事情);
- JUnit/TestNG测试报告:也就是用以图表等形式提供详细的测试报表功能;
- 支持分布式构建:Jenkins可以把集成构建等工作分发到多台计算机中完成;
- 文件指纹信息:Jenkins会保存哪次集成构建产生了哪些jars文件,哪一次集成构建使用了哪个版本的jars文件等构建记录;
- 支持第三方插件:使得 Jenkins 变得越来越强大;
3. Jenkins安装
3.1 下载
官网下载地址: https://jenkins.io/index.html
3.1.1 Windows安装
Windows安装很简单,一步步就完成。安装完成之后,会在Windows中添加一个服务,如图。
注意:Jenkins需要运行Java 5以及以上的版本。
打开浏览器输入:http://localhost:8080 即可打开控制台页面。如果需要修改端口,在Jenkins安装目录下,如:
D:\Program Files (x86)\Jenkins
,打开jenkins.xml
文件,找到这句话,修改8080
<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments>
3.1.2 War包安装
将下载的war包文件部署到servlet容器,然后启动容器,在浏览器的URL地址栏中输入类似http://localhost:8080/jenkins/这样的地址即可。
3.1.3 Maven安装
由于Jenkins可以通过maven进行构建项目,因此JenKins安装的机器上要装有maven。Windows的安装方法本文略,下面讲解Linux下的安装方法。
- 下载maven apache-maven-3.3.9-bin.tar.gz
- 拷贝文件至
/usr/local/maven
,并解压tar zxvf apache-maven-3.3.9-bin.tar.gz
- 配置环境变量,编辑/etc/profile文件,添加如下代码
MAVEN_HOME=/usr/local/maven/apache-maven-3.3.9 export MAVEN_HOME export PATH=${PATH}:${MAVEN_HOME}/bin
- 保存文件,并运行如下命令使环境变量生效
source /etc/profile
- 输入如下命令
mvn -v
,如果能看到Maven相关版本信息,则说明Maven已经安装成功 - 配置setting.xml,打开文件
/usr/local/maven/apache-maven-3.3.9/conf/settings.xml
,修改配置如下:<!-- 自定义本地仓库地址 --> <localRepository>/usr/local/maven/repository</localRepository> <!-- 定义连接公司的私有仓库的用户名及密码 --> <servers> <server> <id>nexus-public</id> <username>admin</username> <password>fhadminci</password> </server> <server> <id>nexus-releases</id> <username>admin</username> <password>fhadminci</password> </server> <server> <id>nexus-snapshots</id> <username>admin</username> <password>fhadminci</password> </server> </servers> <!-- 公司私有仓库镜像 --> <mirrors> <mirror> <id>nexus-public</id> <mirrorOf>*</mirrorOf> <name>Nexus</name> <url>http://10.96.17.50:8081/nexus/content/groups/public/</url> </mirror> <mirror> <id>nexus-snapshots</id> <mirrorOf>*</mirrorOf> <name>Nexus</name> <url>http://10.96.17.50:8081/nexus/content/groups/public/</url> </mirror> <mirror> <id>nexus-plugin</id> <mirrorOf>*</mirrorOf> <name>Nexus</name> <url>http://10.96.17.50:8081/nexus/content/groups/public/</url> </mirror> </mirrors> <!-- 公司私有仓库镜像策略配置 --> <profiles> <profile> <id>nexus</id> <repositories> <repository> <id>nexus</id> <name>Nexus</name> <url>http://10.96.17.50:8081/nexus/content/groups/public/</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>nexus</id> <name>Nexus</name> <url>http://10.96.17.50:8081/nexus/content/groups/public/</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <!-- 激活公司私有仓库镜像策略配置 --> <activeProfiles> <activeProfile>nexus</activeProfile> </activeProfiles>
4. Jenkins使用
本文采用war包部署方式,访问地址为:http://10.96.17.50:8091/jenkins,界面如图
4.1 系统管理
4.1.1 系统设置
-
设置maven
设置ant
4.1.2 Credentials设置
- 添加domain: domain可以理解为一个用户组,一般以项目区分
4.1 创建任务
说明:
- Item名称:描述一下该任务的名称,可以起工程名称
Poll SCM:定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。我的配置如下:
*/5 * * * * (每5分钟检查一次源码变化)
Build periodically:周期进行项目构建(它不care源码是否发生变化),我的配置如下:
0 2 * * * (每天2:00 必须build一次源码)
五个空格隔开的字符组成,分别表示分 时 天 月 年,*表示所有,如0 12,20 * * *表示的就是每天的12点和20点执行一次构建