第1章 持续集成概述 3
1.1敏捷软件研发 3
1.1.1提炼重复任务——实现可回归性的重要前提 4
1.1.2敏捷性——奔向成功的致胜法宝 7
1.2何谓持续集成 7
1.2.1驱动CI的引擎——CI服务器 10
1.2.2敏捷配置管理 11
1.3CruiseControl初探 11
1.4小结 14
第2章 实施持续集成 17
2.1 CruiseControl的下载和安装 17
2.1.1登录到CruiseControl的遗留Web控制台 19
2.1.2登录到CruiseControl的新一代Web控制台 21
2.2 connectfour示例分析 22
2.2.1 connectfour项目背景 22
2.2.2分析config.xml配置文件 24
2.3自定义CruiseControl的运行时行为 26
2.3.1保护JMX HttpAdapter适配器 29
2.3.2借助于RMI操控CruiseControl服务器 31
2.3.3调整CruiseControl的JVM内存使用 33
2.4小结 34
第3章 基于Subversion的持续集成实战 37
3.1 CruiseControl内置的SCM支持 37
3.2 Subversion的安装及配置 38
3.2.1安装Subversion 38
3.2.2配置及初始化Subversion配置库 40
3.3 Spring PetClinic概述 43
3.4借助Subversion和CruiseControl实施持续集成 44
3.4.1从Subversion检出petclinic项目 44
3.4.2设置config.xml 44
3.4.3触发持续集成工作 47
3.4.4查看持续构建结果 48
3.5Subversion客户端支持 56
3.6CruiseControl若干技巧 57
3.6.1模块化Ant文件 57
3.6.2稳健应对构建失败 58
3.6.3控制收集修改集合的策略 60
3.6.4自定义构建产出物的分发渠道 61
3.6.5借助SVNLabellncrementer插件控制构建Label的生成 62
3.7小结 64
第4章 基于CVS的持续集成实战 65
4.1 CVS的安装及配置 65
4.2基于CruiseControl的持续集成实战 67
4.2.1检出位于CVS配置库中的petclinic项目 67
4.2.2配置config.xml 68
4.2.3开始实施CI 69
4.3 CVS客户端支持 71
4.4 CruiseControl若干技巧 71
4.4.1自定义邮件分发策略 71
4.4.2控制不同项目的并行构建能力 74
4.4.3监控logs中的日志文件 77
4.4.4传递给各构建脚本的系统属性 79
4.4.5借助CVS Label lncrementer插件控制构建Label的生成 81
4.4.6自定义构建时机 82
4.5小结 84
第5章 基于VSS的持续集成实战 85
5.1 VSS的安装及配置 85
5.1.1 VSS petclinic配置库的初始化工作 85
5.1.2借助Eclipse VSS插件导入petclinic项目 86
5.2实施基于VSS的持续集成 89
5.2.1“检出”petclinic项目 89
5.2.2配置config.xml 90
5.2.3调整Ant build.xml构建文件 91
5.2.4涉CI之初 92
5.3 CruiseControl单次构建过程详解 93
5.4小结 99
第6章 基于C1earCase的持续集成实战 101
6.1 C1earCase Explorer客户端的安装及配置 101
6.1.1设定CLEARCASE_ PRIMARY_ GROUP环境变量 102
6.1.2创建共享目录 102
6.1.3借助ClearCase Explorer创建静态视图 103
6.2 CruiseControl持续集成的实施 106
6.2.1验证ClearCase Explorer是否正常 106
6.2.2实施基于ClearCase的持续集成 108
6.3 ClearCase Remote Client for Eclipse工作情形 110
6.4 ClearCase相关资源介绍 111
6.5小结 113
第7章 持续数据库集成 117
7.1持续数据库集成概述 117
7.1.1 DBA的痛楚 117
7.1.2将SQL脚本作为SCM配置项 117
7.1.3持续RDBMS集成 118
7.2数据库集成具体实践 119
7.2.1 Ant <sql/>任务 119
7.2.2数据库的销毁工作 120
7.2.3数据库的创建工作 121
7.2.4数据库中已有数据的删除工作 121
7.2.5数据库中初始数据的准备工作 122
7.2.6集成各Ant目标 123
7.2.7手工运行“db-ci”目标 124
7.3小结 126
第8章 持续单元及集成测试 129
8.1持续单元及集成测试概述 129
8.1.1开发经理的烦恼 129
8.1.2引入测试覆盖度 131
8.1.3持续单元及集成测试 131
8.2有关单元及集成测试的具体实践 132
8.2.1基于JUnit及Clover的持续集成 132
8.2.2 Cobertura使用介绍 136
8.2.3 EclEmma概览 142
8.3小结 143
第9章 持续评审 145
9.1持续评审概述 145
9.1.1架构师揪心的那些事 145
9.1.2量化开发规范 146
9.1.3持续评审 146
9.2持续评审实践 147
9.2.1详细设计评审 147
9.2.2 PMD 149
9.2.3 Checkstyle 151
9.2.4 JDepend 152
9.2.5 JavaNCSS 154
9.2.6 FindBugs 156
9.2.7 Fortify 158
9.3小结 159
第10章 持续部署 161
10.1持续部署概述 161
10.1.1烦恼的不只是你 161
10.1.2制度化部署过程 162
10.1.3持续部署 162
10.2有关持续部署的具体实践 163
10.2.1部署测试版本的petclinic应用 163
10.2.2主流应用服务器内置的Ant部署支持 166
10.2.3 SmartFrog 168
10.3小结 168
第11章 持续功能及负载测试 169
11.1持续功能及负载测试概述 169
11.1.1功能及负载测试人员的烦恼 169
11.1.2脚本化功能及负载测试工作 170
11.1.3持续功能及负载测试 173
11.2有关持续功能及负载测试的具体实践 174
11.2.1基于Selenium的自动化功能测试 174
11.2.2基于Apache JMeter的自动化负载测试 179
11.3小结 183
第12章 持续反馈 185
12.1持续反馈概述 185
12.2有关持续反馈的具体实践 186
12.2.1 E-mail 186
12.2.2 Ant脚本 187
12.2.3 RSS 188
12.2.4 FTP 188
12.2.5组合使用各种<Publishers/>子元素 189
12.3小结 190
第13章 分布式集成构建 193
13.1分布式集成构建概述 193
13.2实施分布式集成构建 194
13.2.1构建内置分布式集成构建的CruiseControl版本 194
13.2.2启动“查找服务” 196
13.2.3启用构建Agent 196
13.2.4从SCM配置库检出项目快照 198
13.2.5分布式主构建器启航 200
13.2.6启动CruiseControl服务器 202
13.3有关分布式集成构建的若干技巧 203
13.3.1关于构建Agent的一些实践 203
13.3.2 CruiseControl内置的若干诊断工具 204
13.4小结 206
第14章CruiseControl内核研究及扩展 207
14.1远程调试CruiseControl服务器 207
14.2剥离Web控制台 209
14.2.1 剥离/dashboard控制台 209
14.2.2 剥离/cruisecontrol控制台 214
14.3基于/dashboard控制台的构建网格 215
14.4基于插件的架构 219
14.4.1插件体系架构 220
14.4.2现有的插件集合 223
14.4.3灵活运用<plugin/>插件 227
14.5有关CruiseControl的其他高级技术 229
14.5.1揭秘CruiseControl构建周期 229
14.5.2若干CruiseControl构建循环实现细节 231
14.5.3 CruiseControl是如何构建类路径的 236
14.6小结 237
附录A维护CC配置文件 239
A.1 <cruisecontrol/>权威指南 239
A.1.1全局<property/>权威指南 241
A.1.2 <dashboard/>权威指南 242
A.1.3 <inc1ude.projects/>权威指南 243
A.1.4 <threads/>权威指南 243
A.2全局<plugin/>权威指南 244
A.3 <project/>权威指南 245
A.3.1项目级<property/>权威指南 246
A.3.2项目级<plugin/>权威指南 246
A.3.3<dateformat/>权威指南 246
A.3.4<labelincrementer/>权威指南 246
A.4<listeners/>权威指南 250
A.4.1<cmsynergysessionmonitor/>权威指南 250
A.4.2<currentbuildstatusftplistener/>权威指南 251
A.4.3<currentbuildstatuslistener/>权威指南 252
A.4.4<currentbuildstatuspagelistener/>权威指南 252
A.4.5<lockfilelistener/>权威指南 252
A.5<bootstrappers/>权威指南 253
A.5.1<accurevbootstrapper/>权威指南 254
A.5.2<alienbrainbootstrapper/>权威指南 254
A.5.3<antbootstrapper/>权威指南 255
A.5.4<clearcasebootstrapper/>权威指南 256
A.5.5<clearcaseviewstrapper/>权威指南 256
A.5.6<cmsynergybootstrapper/>权威指南 256
A.5.7<currentbuildstatusbootstrapper/>权威指南 256
A.5.8<currentbuildstatusftbootstrapper/>权威指南 257
A.5.9<cvsbootstrapper/>权威指南 258
A.5.10<execbootstrapper/>权威指南 258
A.5.11<gitbootstrapper/>权威指南 259
A.5.12<harvestbootstrapper/>权威指南 259
A.5.13<lockfi1ebootstrapper/>权威指南 260
A.5.14<mercurialbootstrapper/>权威指南 260
A.5.15<p4bootstrapper/>权威指南 261
A.5.16<plasticscmbootstrapper/>权威指南 261
A.5.17<snapshotcmbootstrapper/>权威指南 261
A.5.18<starteambootstrapper/>权威指南 262
A.5.19<surroundbootstrapper/>权威指南 262
A.5.20<svnbootstrapper/>权威指南 263
A.5.21<tfsbootstrapper/>权威指南 263
A.5.22<vssbootstrapper/>权威指南 264
A.6<modificationset/>权威指南 264
A.6.1<accurev/>权威指南 266
A.6.2<alienbrain/>权威指南 266
A.6.3<alwaysbuild/>权威指南 267
A.6.4<buildstatus/>权威指南 268
A.6.5<clearcase/>权威指南 269
A.6.6<cmsynergy/>权威指南 269
A.6.7<compound/>权威指南 271
A.6.8<cvs/>权威指南 272
A.6.9<darcs/>权威指南 272
A.6.10<filesystem/>权威指南 273
A.6.11<forceonly/>权威指南 273
A.6.12<git/>权威指南 273
A.6.13<harvest/>权威指南 274
A.6.14<httpfile/>权威指南 275
A.6.15<mavensnapshotdependency/>权威指南 275
A.6.16<maven2snapshotdependency/>权威指南 276
A.6.17<mercurial/>权威指南 276
A.6.18<mks/>权威指南 277
A.6.19<p4/>权威指南 277
A.6.20<plasticscm/>权威指南 278
A.6.21<pvcs/>权威指南 278
A.6.22<snapshotcm/>权威指南 279
A.6.23<starteam/>权威指南 279
A.6.24<store/>权威指南 280
A.6.25<surround/>权威指南 280
A.6.26<svn/>权威指南 281
A.6.27<tfs/>权威指南 282
A.6.28<timebuild/>权威指南 282
A.6.29<ucm/>权威指南 283
A.6.30<veto/>权威指南 284
A.6.31<vss/>权威指南 285
A.6.32<vssjournal/>权威指南 285
A.7<schedule/>权威指南 286
A.7.1<ant/>权威指南 288
A.7.2<maven/>权威指南 290
A.7.3<maven2/>权威指南 291
A.7.4<pause/>权威指南 292
A.7.5<nant/>权威指南 292
A.7.6<phing/>权威指南 293
A.7.7<rake/>权威指南 295
A.7.8<exec/>权威指南 295
A.7.9<composite/>权威指南 296
A.8<1og/>权威指南 297
A.8.1<merge/>权威指南 297
A.8.2<gzip/>权威指南 297
A.8.3<delete/>权威指南 298
A.9<publishers/>权威指南 298
A.9.1<antpublisher/>权威指南 299
A.9.2<artifactspublisher/>权威指南 300
A.9.3<clearcasebaselinepub1isher/>权威指南 300
A.9.4<cmsynergybaselinepublisher/>权威指南 300
A.9.5<cmsynergytaskpublisher/>权威指南 301
A.9.6<compoundpublisher/>权威指南 301
A.9.7<currentbuildstatuspublisher/>权威指南 302
A.9.8<currentbuildstatusftppublisher/>权威指南 302
A.9.9<email/>权威指南 303
A.9.10<execute/>权威指南 304
A.9.11<ftppublisher/>权威指南 305
A.9.12<htmlemail/>权威指南 305
A.9.13<http/>权威指南 306
A.9.14<jabber/>权威指南 308
A.9.15<onfailure/>权威指南 308
A.9.16<onsuccess/>权威指南 308
A.9.17<rss/>权威指南 309
A.9.18<sametimeannouncement/>权威指南 309
A.9.19<scp/>权威指南 310
A.9.20<sfeedocman/>权威指南 311
A.9.21<sfeefrs/>权威指南 311
A.9.22<sfeetracker/>权威指南 312
A.9.23<socket/>权威指南 312
A.9.24<weblog/>权威指南 313
A.9.25<x10/>权威指南 314
A.9.26<xsltlogpublisher/>权威指南 314
A.9.27<yahoopublisher/>权威指南 314
A.10小结 315