用户工具

站点工具


分享:技术:持续集成:jenkins的介绍安装与使用

Jenkins的介绍安装与使用

什么是持续集成

随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火,如何能再不断变化的需求中快速适应和保证软件的质量也显得尤其的重要。

持续集成正是针对这一类问题的一种软件开发实践。它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。

持续集成的核心价值

  1. 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量;
  2. 持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能;
  3. 持续集成还能利于软件本身的发展趋势,这点在需求不明确或是频繁性变更的情景中尤其重要,持续集成的质量能帮助团队进行有效决策,同时建立团队对开发产品的信心。

持续集成的原则

业界普遍认同的持续集成的原则包括:

  1. 需要版本控制软件保障团队成员提交的代码不会导致集成失败。常用的版本控制软件有 IBM Rational ClearCase、CVS、Subversion 等;
  2. 开发人员必须及时向版本控制库中提交代码,也必须经常性地从版本控制库中更新代码到本地;
  3. 需要有专门的集成服务器来执行集成构建。根据项目的具体实际,集成构建可以被软件的修改来直接触发,也可以定时启动,如每半个小时构建一次;
  4. 必须保证构建的成功。如果构建失败,修复构建过程中的错误是优先级最高的工作。一旦修复,需要手动启动一次构建。

持续集成系统的组成

由此可见,一个完整的构建系统必须包括: 一个自动构建过程,包括自动编译、分发、部署和测试等。 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库。 一个持续集成服务器。本文中介绍的 Jenkins 就是一个配置简单和使用方便的持续集成服务器。

Jenkins的介绍

Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。

Jenkins的官网地址:http://jenkins-ci.org/

Jenkins的安装

以下是在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

安装过后,详情如下:

  • 自动新建一个jenkins用户,宿主目录位于/var/lib/jenkins(可以进root用户passwd jenkins修改密码)
  • 日志文件位于/var/log/jenkins/jenkins.log
  • 配置文件位于:/etc/default/jenkins和/etc/init.d/jenkins
  • 默认端口8080

由于,在我的机器8080端口已经被tomcat占用,所以这里要修改端口,方法如下:

  1. 修改/etc/init.d/jenkins,搜索“$HTTP_PORT” “8080”,改成“$HTTP_PORT” “7070”
  2. 修改/etc/default/jenkins,搜索HTTP_PORT=8080改成HTTP_PORT=7070

启动脚本可以带上端口号,使用nohup让进程在背后运行

nohup java -jar /usr/share/jenkins/jenkins.war --httpPort=7070 >> ~/logs/jenkins/jenkins_nohup.out &

到这里,安装都已完成。

Jenkins的访问

Jenkins新建构建任务前的准备

访问 系统管理>系统配置 http://121.43.104.34:7070/configure

  • 设置maven

  • 设置subversion

Jenkins新建构建任务

到这里,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常用菜单介绍

构建历史可以查看之前的构建记录,红色表示构建失败,蓝色表示构建成功 点击#1,#2进入页面后,点击左侧的Console Output可以查看构建成功日志,失败日志和失败后的解决建议

Jenkins暂未研究功能

Jenkins用户 Jenkins插件 Jenkins邮件功能:比如构建失败会邮件通知 Jenkins定规则构建:比如定时每天早上9点构建一次

Jenkins相关目录介绍

~/.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包

Jenkins构建出错记录

  • 报错1
[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掉其他进程释放内存,重新构建。

  • 报错2
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

分享/技术/持续集成/jenkins的介绍安装与使用.txt · 最后更改: 2015/07/15 18:10 由 gxx