1、第 5 章 其它说明 195.1 CI挑战 195.2 ANT基本知识 19概述什么是持续集成随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火,如何能再不断变化的需求中快速适应和保证软件的质量也显得尤其的重要。持续集成正是针对这一类问题的一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础。它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误
2、,让团队能够更快的开发内聚的软件。持续集成最早由Martin Fowler 于10年前已经提出,希望通过持续集成能够实现以下过程: 任何人在任何地点,任何时间可以构建整个项目。 在持续集成构建过程中,每一个单元测试都必须被执行。 在持续集成构建过程中,每一个单元测试都必须通过。 持续集成构建的结果是可以发布的软件包。 当以上任何一点不能满足时,整个团队的主要任务就是去解决这个问题。持续集成的核心价值持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量;持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现
3、软件的集成问题,使任意时间发布可部署的软件成为了可能;持续集成还能利于软件本身的发展趋势,这点在需求不明确或是频繁性变更的情景中尤其重要,持续集成的质量能帮助团队进行有效决策,同时建立团队对开发产品的信心。持续集成的原则业界普遍认同的持续集成的原则包括:1)需要版本控制软件保障团队成员提交的代码不会导致集成失败。常用的版本控制软件有 IBM Rational ClearCase、CVS、Subversion 等;2)开发人员必须及时向版本控制库中提交代码,也必须经常性地从版本控制库中更新代码到本地;3)需要有专门的集成服务器来执行集成构建。根据项目的具体实际,集成构建可以被软件的修改来直接触发
4、,也可以定时启动,如每半个小时构建一次;4)必须保证构建的成功。如果构建失败,修复构建过程中的错误是优先级最高的工作。一旦修复,需要手动启动一次构建。持续集成系统的组成由此可见,一个完整的构建系统必须包括: 一个自动构建过程,包括自动编译、分发、部署和测试等。 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库。 一个持续集成服务器。本文中介绍的 Jenkins/Jenkins 就是一个配置简单和使用方便的持续集成服务器。Jenkins介绍Jenkins是一个软件界非常流行的开源CI服务器,Hodson是基于Java开发的一种持续集成工具,用于监控持续重复的工作,
5、功能包括: 持续的软件版本发布/测试项目。 监控外部调用执行的工作。Jenkins的新版本取名叫Jenkins,所以本文档中的指Jenkins与Jenkins这2个词为指同一个软件。使用Jenkins人员需要对持续集成的概念有所了解,更多的要求对代码的编译过程很了解,Jenkins对于maven工程完整的编译和发布流程如下: Jenkins从SVN上拉取代码到指定的编译机器上。 在编译机器上触发编译命令或脚本。 编译得到的结果文件。 把结果文件传到指定的服务器上。使用Jenkins进行编译的人员,需要对自己的代码的编译方法,过程十分了解,对编译任务进行分拆。 基础篇 Jenkins安装 资源下
6、载首先从http:/jenkins-ci.org/下载最新的jenkins版本,最新版本为1.594,下载的文件载体为jenkins.war;Jenkins为免费开源软件,并且更新速度稳定,每周一次更新。所以网站上会提供有2个版本,一个最新版本,一个老但稳定的版本。可自行选择。 运行Jenkins的前提1) 环境变量的设置:a) JAVA_HOME,设置JDK的安装目录,建议采用JDK1.7,但不建议用JDK1.8b) ANT_HOME,设置Ant的目录,验证过ant最新版本1.9.4可用。c) JENKINS_HOME,设置Jenkins的配置文件目录,默认为用户的目录,建议为Jenkins
7、的安装目录,便于控制;d) MEVAN_HOME,设置Maven的目录,验证3.2.3可用。e) PATH,需要将java、ant,maven的bin目录配置到path目录下;f) CLASSPATH,需要将JDK的tools.jar配置到classpath目录中;Jenkins启动可以有两种方法进行运行jenkins;a) 直接通过命令行如下:/opt/jdk1.7.0_71/bin/java -jar /opt/jenkins.war -httpPort=8089 -logfile=/opt/jenkins/jenkins.log说明:httpPort为jenkins运行的端口,默认端口为
8、8080,上述命令其实让Jenkins运行在Winstone容器中;以下有一些常用的参数:更多参数可以查看Command Line ParameterDescription-httpPort=$HTTP_PORTRuns Jenkins listener on port $HTTP_PORT using standardhttpprotocol. The default is port 8080. To disable (because youre usinghttps), use port-1.-httpListenAddress=$HTTP_HOSTBinds Jenkins to the
9、 IP address represented by $HTTP_HOST. The default is 0.0.0.0 i.e. listening on all available interfaces.For example, to only listen for requests from localhost, you could use: -httpListenAddress=127.0.0.1-httpsPort=$HTTP_PORTUses HTTPS protocol on port $HTTP_PORT-httpsListenAddress=$HTTPS_HOSTBinds
10、 Jenkins to listen for HTTPS requests on the IP address represented by $HTTPS_HOST.-prefix=$PREFIXRuns Jenkins to include the $PREFIX at the end of the URL.For example, to make Jenkins accessible athttp:/myServer:8080/jenkins, set -prefix=/jenkins-ajp13Port=$AJP_PORTRuns Jenkins listener on port $AJ
11、P_PORT using standardAJP13protocol. The default is port 8009. To disable (because you-ajp13ListenAddress=$AJP_HOSTBinds Jenkins to the IP address represented by $AJP_HOST. The default is 0.0.0.0 i.e. listening on all available interfaces.-argumentsRealm.passwd.$ADMIN_USERSets the password for user $
12、ADMIN_USER. If Jenkins security is turned on, you must log in as the $ADMIN_USER in order to configure Jenkins or a Jenkins project. NOTE: You must also specify that this user has anadminrole. (See next argument below).-argumentsRealm.roles.$ADMIN_USER=adminSets that $ADMIN_USER is an administrative
13、 user and can configure Jenkins if Jenkins security is turned on. SeeSecuring Jenkinsfor more information.-Xdebug -Xrunjdwp:transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=nSets debugging on and you can access debug on $DEBUG_PORT.-%m-%d_%H-%M.logLogging to desired file-XX:PermSize=512M -XX
14、:MaxPermSize=2048M -Xmn128M -Xms1024M -Xmx2048Mreferringto these options for Oracle Javab) 在Web容器中运行Jenkins可以运行在标准的Web服务器中,支持Tomcat、Jboss、WebLogic中,只需要将Jenkins.war放置到相应目录,启动服务就可以进行访问;推荐采用这个方式运行,方便配置和迁移。 Jenkins访问验证jenkins是否运行正常,通过访问http:/10.1.200.59:8089即可。Hudosn应用支持IE、FireFox等浏览器。分布式jenkins安装为了满足各种
15、编译环境的需求,jenkins支持分布式,以jenkins agent的形式运行slave机。1. 在jenkins的主机上,选择系统管理管理节点2. 新节点输入名字3. 选择Dumb Slave OK4. 设置处理器的数量,一般以CPU核数来确定,如4核的一般写35. 选择远程根目录,在slave机上用来存放jenkins自身运行所要的文件6. 使用方式:为了分担master机器的负载,可选尽可能多的使用本机器或,只允许运行指定本机的任务7. 启动方法:对于window推荐使用Launch slave agents via Java Web Start8. 有效性:任何时间有效配置好了之后,
16、1. 从slave机器上打开浏览器,访问jenkins主机:/yourjenkinsmaster:8080)2. 在系统管理管理节点,打开建立的节点。3. 点启动按钮,jenkins agent就会从浏览器下载包需要的jar、jnlp包,然后启动。运行程序在windows中,可以安装成为服务进程,但如果是运行selenium这种自动化工作的机器,则不建议这么做。 Jenkins基本设置 Jenkins的基本设置都在系统的后台设置中,具体路径为:系统管理-系统管理 设置JDK可以在这里进行JAVA_HOME设置,假如已经系统已经设置JAVA_HOME,可以不需要再进行配置,同时可以让Jenkin
17、s再安装一个JDK。 设置Maven设置ANT可以在这里进行ANT_HOME设置,假如系统已经设置了ANT_HOME,可以不需要再进行配置,同时可以让Jenkins安装一个最新的ANT。备注:为了让配置更加简单,建议在系统级设置JAVA_HOME和ANT_HOME,MAVEN_HOME,便于系统的迁移。 配置邮件信息系统能够在执行计划完成后发送结果邮件,需要配置邮件服务器的相关信息:上面还需要配置Jenkins的URL地址,作为后期访问地址,一旦设定URL,就不要轻易修改。左边显示的可过滤的条件及属于当前用户的BUG 创建任务在Jenkins主菜单点击“新建任务”,出现下图:键入任务名称,选择
18、“Build a free-style software project”选项,点击“OK”按钮后,出现下面的界面:说明:a) Project name:项目(任务)名称,项目(任务)名称不能重复,后面通称任务;b) Description:项目描述,主要对任务进行简要说明;c) Discard old builds:是否保留过去的构建,默认是保留。(帮助:这里控制着您想要在Jenkins所在的磁盘把构建记录存储的有效期(诸如控制台输出、编译构件等等)。Jenkins为此提供了两个标准:1。时间驱动。在Jenkins中您可以判断如果达到一定时限来删除一条记录(例如,七天前)。2。数量驱动。在J
19、enkins中您可以确保它拥有N份构建。如果又有新的构建开始,最早的那份(记录)就将被删除。Jenkins也可以让您建立的个别构建定义为永远保持这个记录,以便防止某些重要的构建被自动丢弃。)d) This build is parameterized : 如果选择此选项,Jenkins将允许您提供一套任意的键值对参数,它们会被传递到构建过程里。配置的参数往往是构建运行环境中的一些环境变量。(帮助:当您使用了Jenkins的各种自动化,有时要求在构建过程中提供一组用户的输入,使用“parameterize”就能够更方便构建。例如,您可能会设立一个按需测试,在那里用户可以提交一个二进制文件的压缩文
20、件来进行测试。e) Disable Build:禁止此任务进行构建,默认是不禁止;f) Execute concurrent builds if necessary(beta):g) Advanced Project Options1) Quite period:构建前等待时间;2) Retry Count:从SCM仓库中取出尝试时间;3) Block build when upstream project is building:假如上一个仍在构建过程中,停止本次构建任务;4) Use custom workspace:指定当前任务的workspace,否则默认为JENKINS_HOME的工
21、作目录h) Source Code Management:指定编译源代码的获取方式:1) None:手动方式;2) CVS:从CVS仓库中获取;备注:CVS通过Module(s)获取多个项目工程3) SVN:从SVN仓库中获取;SVN通过“Add more locations”来添加多个工程,在SVN的URL中需要添加用户名密码信息,例如:svn:/username:passwd192.168.1.15/SKELETON-V2.0/trunk/program/source/skeletonCommoni) Builds Triggers:设置构建触发器1) Build after other
22、projects are built:设置构建的流水线,配置在设置的任务构建完成后自动构建此任务,进行设置后,可以在任务统揽中看到以下“下游项目说明”2) Trigger builds remotely (e.g., from scripts):设置远程触发进行任务构建;3) Build periodically:设置构建频率,设置跟Quartz CronTrigger设置雷同;4) Poll SCM:设置从SCM库中检查源代码是否更新:关于第三和第四两点,基本配置为 分钟 小时 天 月 星期举例: 每分钟进行集成 * * * * *, 每5分钟进行集成 5 * * * *,每天12点和23整
23、点进行集成 0 12,23 * * *j) Build Environment:设置构建环境设置1) Tool Environment:设置工具的环境变量2) Create a formatted version number:设置构建的版本号k) Build:执行构建构建支持6种方式,shell(运行于Linux环境)、Maven(支持Maven编译)、Command(windows批处理命令)、Ant、EasyAnt、Export job runtime parameters。1) Ant: Targets主要是执行ant脚本中哪几个部分,可以添加多个; Build File:需要指定An
24、t脚本的物理位置; Properties:添加Ant指定的属性; Java Options:设置运行java时的属性,例如内存、堆大小等;2) Command执行Windows的批处理命令,这里不能利用Hodson设置的变量;l) Post-build Actions1) Publish Javadoc:设置构建时产生JavaDoc时的文件目录;2) Archive the artifacts:设置构建后哪些文件需要进行归档处理;3) E-mail Notification:邮件提醒可以向多个人发送邮件,通过“;”进行分割4) Status Monitor:构建状态监控;:),好,基本的配置到
25、这里结束,可以搭建一个新的任务进行构建了; 运行并监控构建作业 主控制面板当配置完成一个任务后,回到主控制面板: 上图中右边列表列举现在已经配置的任务已经任务当前的状态 左边有构建队列,当有构件时,会把当前正在构建的队列在上面进行列举; 上图右下角有RSS订阅,支持订阅全部、失败和最后一次等; 手动构建一个任务当一个任务配置完成后,可以采用手动构建和触发器构建两种方式,在项目验证阶段,可以通过手动触发方式,点击任务区的“立即构建”,会在Build History中出现以下进度条:点击进度条,可以进入到具体的编译过程,例如下图:等构建完毕后,你可以看到最新任务构建的结果图:浏览任务的整体运行状况
26、入下图:最左边列图示为最后一次构建状态,第二列图示为整个任务的构建总体结果,具体如下表示,下图也只截取部分:任务构建状态Jenkins通过当前构建状态和构建稳定新 当前构建状态分为以下几种项目构建完成,同时被认为是稳定的项目构建完成,但被认定为不稳定构建失败作业已经禁止 构建稳定行,Jenkins会基于一些后处理器任务为构建发布一个稳健指数(从0-100 ),越高越稳定构建成功率80%构建成功率60%-79%构建成功率40%-59%构建成功率20%-39%构建成功率0-19%期待任务编译都处于和 状态。 提高篇: 插件管理:由Jenkins类库现有的Jenkins功能性扩展和开发者们为Jenk
27、ins提供的新功能都可以称之为Jenkins插件。Jenkins将插件分为Artifact Uploaders、Authentication and User Management、Build Notifiers、Build Reports、Build Tools、Build Triggers、Build Wrappers、Cluster Management and Distributed Build、Command Line Interface、External Site/Tool Integrations、Maven、Miscellaneous、Other Post-Build Acti
28、ons、Page Decorators、Slave Launchers and Controllers、Source Code Management、User Interface等17个插件大类。1) Artifact Uploaders:协助把构建结果发布到一些网络终端上,例如FTP服务器、Tomcat应用服务器、J版本库等等;2) Authentication and User Management:Hodson基本包不提供用户权限管理,通过此插件,融入LDAP、MySql等权限管理插件,丰富权限管理;3) Build Notifiers:任务构建完成后发布通知的方式,支持Twitter、
29、IRC、Google日历等;4) Build Reports:主要针对构建的源代码进行分析的报表,例如FindBugs、Checkstyle等等,5) Build Triggers:构建事件监听并触发构建的插件, 例如通过URL改变进行触发编译;6) Build Tools:实现额外构建工具的插件,例如Ruby Plugin、Grails Plugin等;7) Build Wrappers:8) Cluster Management and Distributed Build:9) Command Line Interface:10) External Site/Tool Integrations:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1