随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火,如何能再不断变化的需求中快速适应和保证软件的质量也显得尤其的重要。
持续集成正是针对这一类问题的一种软件开发实践。它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。
业界普遍认同的持续集成的原则包括:
由此可见,一个完整的构建系统必须包括: 一个自动构建过程,包括自动编译、分发、部署和测试等。 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库。 一个持续集成服务器。本文中介绍的 Jenkins 就是一个配置简单和使用方便的持续集成服务器。
Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。
Jenkins的官网地址:http://jenkins-ci.org/
以下是在Ubuntu 14.04.2上安装的步骤(摘自官网的安装步骤:https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu)
wget -O - https://jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add - #使用sudo输入root的密码 sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list' sudo apt-get update sudo apt-get install jenkins
安装过后,详情如下:
由于,在我的机器8080端口已经被tomcat占用,所以这里要修改端口,方法如下:
“$HTTP_PORT” “8080”
,改成“$HTTP_PORT” “7070”
HTTP_PORT=8080
改成HTTP_PORT=7070
启动脚本可以带上端口号,使用nohup让进程在背后运行
nohup java -jar /usr/share/jenkins/jenkins.war --httpPort=7070 >> ~/logs/jenkins/jenkins_nohup.out &
到这里,安装都已完成。
到这里,Jenkins构建任务就可以成功执行完,相当于Ubuntu上之前写的脚本,达到的效果是一样的:
mkdir -p ~/build/target/record mkdir -p ~/distribute/record cd ~/build/target/record rm -rf * svn co svn://121.43.104.34/gxx/trunk/record --username gxx --password 123456 ~/build/target/record cd ~/build/target/record mvn clean install -P test cp ~/build/target/record/target/*.war ~/distribute/record/record.war cp ~/build/target/record/target/*.war /home/soft/apache-tomcat-6.0.39/webapps/ tail -f ~/logs/record/record.log
~/.jenkins #安装Jenkins后,用户宿主目录下会有一个隐藏文件夹(类似.m2),需要ls -a才能看到,里面放置Jenkins基本上所有的东西 ~/.jenkins/plugins #插件目录 ~/.jenkins/jobs #任务目录 ~/.jenkins/jobs/record/workspace #任务名为record的工作空间目录,里面放置svn拉下来的源代码 ~/.jenkins/jobs/record/workspace/src #源代码目录 ~/.jenkins/jobs/record/workspace/pom.xml #pom.xml ~/.jenkins/jobs/record/workspace/target #构建目标目录 ~/.jenkins/jobs/record/workspace/target/record.war #构建后的war包
[workspace] $ java -Xms256m -Xmx512m -cp /home/gxx/.jenkins/plugins/maven-plugin/WEB-INF/lib/maven31-agent-1.5.jar:/home/soft/apache-maven-3.3.3/boot/plexus-classworlds-2.5.2.jar:/home/soft/apache-maven-3.3.3/conf/logging jenkins.maven3.agent.Maven31Main /home/soft/apache-maven-3.3.3 /home/gxx/.jenkins/war/WEB-INF/lib/remoting-2.51.jar /home/gxx/.jenkins/plugins/maven-plugin/WEB-INF/lib/maven31-interceptor-1.5.jar /home/gxx/.jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-interceptor-commons-1.5.jar 45620 Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000dae00000, 89456640, 0) failed; error='Cannot allocate memory' (errno=12) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (malloc) failed to allocate 89456640 bytes for committing reserved memory. # An error report file with more information is saved as: # /home/gxx/.jenkins/jobs/record/workspace/hs_err_pid9721.log
insufficient memory
表示内存不足,Ubuntu中top
查看KiB Mem: 1016272 total, 943532 used, 72740 free, 248 buffers
,显示1016M内存已经使用943M,还剩72M内存可用,内存基本已经用满,所以构建失败!解决方法:扩大内存,或者,kill掉其他进程释放内存,重新构建。
Started by user anonymous Building in workspace /home/gxx/.jenkins/jobs/record/workspace Updating svn://121.43.104.34/gxx/trunk at revision '2015-07-15T18:00:42.200 +0800' At revision 39 no change for svn://121.43.104.34/gxx/trunk since the previous build Parsing POMs [workspace] $ /bin/sh -xe /tmp/hudson8535227838770415382.sh + cp target/record.war /home/soft/apache-tomcat-6.0.39/webapps/ ERROR: No such file /home/gxx/.jenkins/jobs/record/workspace/pom.xml Perhaps you need to specify the correct POM file path in the project configuration? Finished: FAILURE
No such file /home/gxx/.jenkins/jobs/record/workspace/pom.xml
表示pom.xml找不到,原因是svn路径写错svn:121.43.104.34/gxx/trunk
,应该是
svn:121.43.104.34/gxx/trunk/record