Jenkins持续集成平台蒋刚毅cay1目录索引2持续集成概念Jenkins简介自动构建静态代码检查自动化测试自动部署和发布线上监控Jenkins插件开发前言:先推荐两本经典书籍3第18届Jolt震撼大奖图书(2008年)第21届Jolt大奖获奖图书(2011年)前言:一次简单的软件发布过程4代码编译静态检查单元测试构建安装包测试环境部署功能验收测试线上部署和发布线上监控和分析开发测试运维数据分析SCMPMSQA是否有可能把这么多过程自动化呢?是否可以按下一个按钮就执行许多过程?持续集成(ContinuousIntegration)5什么是持续集成?持续集成(CI)是一种实践,可以让团队在持续的基础上收到反馈并进行改进,不必等到开发周期后期才寻找和修复缺陷。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。持续集成的好处:经常构建软件可以确保尽早遇到问题(比如代码缺陷),避免问题在软件开发周期晚期变复杂时才被发现。持续集成是敏捷开发的一个最佳实践。持续集成要素61.统一的代码库2.自动构建3.自动测试4.每个人每天都要向代码库主干提交代码5.每次代码递交后都会在持续集成服务器上触发一次构建6.保证快速构建7.模拟生产环境的自动测试8.每个人都可以很容易的获取最新可执行的应用程序9.每个人都清楚正在发生的状况10.自动化的部署持续集成过程7提前并频繁地做让你感到痛苦的事情!Jenkins是一个CI服务器8自动完成软件代码的编译和测试过程。使用CIServer会使您的工作变得容易简单、持续,自动编译过程帮助软件开发团队减少项目风险,提高工作效率和软件产品质量。1、发现bug更加容易;2、提供快速的反馈;3、隔离问题;4、确保一个持续可靠的build只有CI服务器是远远不够的!9CI服务器本质上只不过是一个定时器,时间一到,做你让它做的事情。--JezHumbleCI服务器必然要有其它工具与其结合,方显持续集成的本色。代码管理工具:svn,git等。编译工具:maven,ant等。代码检查工具:checkstyle,findbug等。测试工具:JUnit,RobotFramework,Selenium等。测试覆盖率:Jcoverage,cobertura等。部署工具:puppet,chef等。……Jenkins特性10Jenkins有哪些特性?易于安装:只要把Jenkins.war部署到servlet容器,不需要数据库支持。易于配置:所有配置都是通过其提供的web界面实现。集成RSS/E-mail/IM:通过RSS发布构建结果或当构建失败时通过e-mail实时通知。生成JUnit/TestNG测试报告分布式构建支持:Jenkins能够让多台计算机一起构建/测试。文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。插件支持:Jenkins可以通过插件扩展,你可以开发适合自己团队使用的工具。使用Jenkins构建项目11Howtocreateanewproject?使用Jenkins构建项目12Edittheinformationofproject使用Jenkins构建项目13ProjectName:工程名称,可随便修改,不是在Eclipse中创建工程时的那个工程名,但允许与其同名。Description:对构建工程的一些说明和描述信息,可以留空,也可以是任意的HTML标记语言。Discardoldbuilds:抛弃旧的构建。Jenkins默认保留过去的构建信息。Thisbuildisparameterized:如果选择此选项,Jenkins将允许您提供一套任意的键值对(key=value)参数,它们会被传递到构建过程里。配置的参数往往是构建运行环境中的一些环境变量。DisableBuild:禁用工程构建。Executeconcurrentbuildsifnecessary:并发构建工程。[测试版功能,慎用]Parametersofproject使用Jenkins构建项目14SubversionSettings使用Jenkins构建项目15Buildafterotherprojectsarebuilt:构建依赖,需指定其它projects的name;多个项目名间用逗号分隔。Buildperiodically:定期(周期性的)静态执行构建任务,不检查源码仓库是否有变化。PollSCM:轮询调度构建任务。每次执行构建前会检查源码仓库是否有变化,有变化则先执行代码更新,然后再执行构建。Triggers使用Jenkins构建项目16[举例:]012,20***在每天的12点整和20点整进行一次构建。0/15****每隔15分钟进行一次构建H9-18/2**1-5onceeverytwohourseveryweekday(perhapsat10:38AM,12:38PM,2:38PM,4:38PM)ScheduleUsageMINUTEMinuteswithinthehour(0–59)HOURThehouroftheday(0–23)DOMThedayofthemonth(1–31)MONTHThemonth(1–12)DOWThedayoftheweek(0–7)where0and7areSunday.使用Jenkins构建项目17Executeshell:执行Shell脚本进行构建Invoketop-levelMaventargets:调用Maven进行构建ExecuteWindowsbatchcommand:批处理进行构建InvokeAnt:调用Ant对工程进行构建BuildProjectwithMaven使用Jenkins进行静态代码检查18常用静态代码检查工具:FindBugs:基于BugPatterns概念,查找javabytecode(.class文件)中的潜在bug。PMD:检查Java源文件中的潜在问题。CheckStyle:检查Java源文件是否与代码规范相符。使用Jenkins进行静态代码检查19Jenkins集成自动化测试-RobotFramework20使用Jenkins集成自动化测试-Junit21使用Jenkins自动部署和发布22常用的自动部署插件:PublishOverSSH:SendbuildartifactsoverSSHDeploytocontainerPlugin:Thispluginallowsyoutodeployawartoacontainerafterasuccessfulbuild.SupportTomcat/Jboss/GlassFish.JenkinsArtifactDeployerPlugin:Thisplug-inmakesitpossibletodeployartifactsfromworkspacetooutputdirectories.使用Jenkins监控线上服务23监控Job中用到的一些特殊插件:eXtremeFeedbackPanelPlugin:动态显示各个见空格Job的工作状态。JenkinsSoundsplugin:对异常的Job提供声音报警。CloneWorkspaceSCMPlugin:各个Job之间实现workspace代码的复制。使用Jenkins监控线上服务24主要监控点:1.服务状态监控。2.外部平台状态监控。3.数据库数据生成监控。Jenkins插件开发25插件实现原理:Jenkins定义了一些功能点,是以接口或者抽象类出现的。需要对某个功能作扩展时,需要实现相应的接口或者抽象类。目前可扩展的功能点(78个):AdministrativeMonitor,AuthorizationStrategy,Axis,BuildWrapper,Builder,CLICommand,ChangeLogAnnotator,Cloud,ComputerConnector,ComputerLauncher,ComputerListener,ComputerPinger,ConsoleAnnotationDescriptor,ConsoleAnnotatorFactory,ConsoleLogFilter,CrumbIssuer,Downloadable,ExtensionFinder,FileSystemProvisioner,FileSystemProvisionerDescriptor,ItemListener,Job,JobProperty,LabelAtomProperty,LabelFinder,LauncherDecorator,Lifecycle,ListViewColumn,LoadPredictor,MailAddressResolver,ManagementLink,MatrixAggregatable,MatrixAggregator,MyViewsTabBar,Node,NodeMonitor,NodeProperty,Notifier,PageDecorator,ParameterDefinition,PeriodicWork,PluginServletFilter,PluginStrategy,ProcessKiller,QueueDecisionHandler,QueueSorter,QueueTaskDispatcher,Recorder,RepositoryBrowser,RestartListener,RetentionStrategy,RootAction,Run,RunListener,SCM,SCMListener,SaveableListener,SecurityRealm,Solution,SubTaskContributor,TestDataPublisher,TestResultParser,ToolInstallation,ToolInstaller,ToolLocationTranslator,ToolProperty,TopLevelItem,TransientProjectActionFactory,TransientViewActionFactory,Trigger,UDPBroadcastFragment,UpdateCenterConfiguration,UserNameResolver,UserProperty,View,ViewJobFilter,ViewsTabBar,Widget参考:插件开发基本环境:JDK必须是1.6以上的Maven必须是2.0以上Maven配置修改settings.xml文件,加入下面的内容。settingspluginGroupspluginGrouporg.jenkins-ci.tools/pluginGroup/pluginGroups/settings工程创建进入插件工程所要放到目录,使用maven命令创建工程$mvn-Uhpi:create提示你填写groupId(包名)和artifactId(项目工程名)如果使用eclipse开发,可使用maven命令导入eclipse工程结构$mvn-DdownloadSources=true-DdownloadJavadocs=true-DoutputDirectory=target/eclipse-classeseclipse:eclipse26Jenkins插件的代码目录27src/main/java:存放java源文件。例如HelloWorldBuilder是我们所要编写的插件类,需实现相应的扩展点。src/main/resourcesjelly/Groovy视图文件。src/main/web