本书从实践者的角度,在讲解Jenkins基本原理的同时,深入到持续集成、持续交付领域,为读者梳理出如何使用Jenkins设计和实现一个自动化的、周期性的集成测试过程,帮助读者理解Jenkins适用于什么场景。书中首先介绍Jenkins以及持续集成、持续交付的基础知识;然后安装Jenkins和配置Jenkins服务器,使用Jenkins建立构建作业、进行自动化测试,介绍Jenkins支持的几种安全模式,如何使用Jenkins进行消息通知,如何确保代码质量;最后进阶展示如何建立高级的和分布式的构建,如何进行自动化的部署和交付以及对Jenkins的运维。
本书是向你展示了如何使用Jenkins自动化你的构建、集成、发布和开发过程的完全指南
译者序
2013 年末,由于工作需求,我们开始在团队内部全面实施持续集成、持续交付作业流程,持续集成和持续交付改变了我们从源码管理到产品发布的整个流程。要知道,我们曾经有过一段时间都在忙碌的打包、发包中度过,那可是非常痛苦的。
Jenkins 作为持续集成、持续交付领域内的优秀开源软件,自然而然地成为我们在项目中大量运用的工具。我们在Jenkins 的优化配置以及运用上积累了丰富的经验,所以想花时间翻译一下这本书,其一是对我们所学知识的再学习和巩固,其二是想对自由与开源软件在国内的推广做一些文档汉化的事情。
Jenkins 已经成为持续集成、持续交付工具链中一个非常重要的部分。它是一款高效易用的工具,而且是开源的,提供了很多种类的插件供用户使用。但是,真正地掌握好Jenkins 的使用并不是一件轻松的事情,如何更好地运用Jenkins 创建出高效、稳定、灵活的作业流是从事持续集成、持续交付的人员所面临的问题。
本书就是一本能够让持续集成、持续交付人员轻松面对这一问题的书籍。本书基于作者优秀的实践经验,为读者梳理出如何使用Jenkins 设计和实现一个高效、灵活的持续集成、持续交付作业流,帮助读者理解Jenkins 适用于什么场景,让读者学会如何使用Jenkins去考虑和解决实际问题。
非常感谢电子工业出版社的付睿编辑对本书翻译工作的大力支持,还要感谢李云静编辑对本书校对做出的贡献。
全书由郝树伟、于振苓、熊熠三人共同翻译。由于水平有限,书中出现错误与不妥之处在所难免,恳请读者批评指正。
译者
2016 年9 月
序
七年前我为Jenkins 的项目写了第一行代码,它最初被称为Hudson。我是那个曾经破坏过构建的人,所以我需要一个程序在我同事发现错误之前捕捉到错误。这只是一个简单的工具,并且只做了一件简单的事情。但它迅速发展,现在我想它是在整个市场上最占主导地位的CI 服务器,包括广泛的插件系统、商业分布、Jenkins 即服务式的托管、用户组、分享会、培训等。
与我的其他项目一样,这个项目从成立以来就是开源的。它的生命,主要依赖于他人的帮助和关爱,没有这一点,项目就不会是当前的状态。在这段时间里,我也学到了一些关于运作开源项目的经验。从这一经验,我认为人们往往忽略有很多方法可以帮助一个开源项目,写代码仅是其中的一个。还有宣传、帮助其他用户、组织分享会,当然还有写文档。
从这个意义上来说,John 是Jenkins 社区的重要组成部分,即使他没有贡献代码——相反,他让新用户更容易接受Jenkins。例如,他有一个很多人关注的博客,在那里他经常谈论关于持续集成的做法和其他软件开发的主题。他善于解释事情,即使是刚接触到Jenkins的人们也可以理解它们,像我这样每天开发Jenkins 的人通常是很难想象的。他的培训课程也是众所周知的,Jenkins 是其中的一部分。这是让更多的人接触到Jenkins 的另一种方式。他显然有宣传新的思想和指导开发人员更加高效的激情。
这些天我把我的时间花在CloudBees 开源Jenkins 上,用Jenkins CloudBees pro 版本,我们在Jenkins 之上构建了插件,并且用CloudBees DEV@cloud 服务把Jenkins 部署到私有以及公有云。在这个角色中,我与John 比以前有了更多的互动,我更加尊重他的激情。
所以他承担了写一本关于Jenkins 的书的艰巨任务,我真的很高兴。这本书提供了关于持续集成的主要经典部分的伟大概述。而对我个人来说,我总是被问及是否有一本关于Jenkins 的书,现在我终于可以肯定地回答这个问题了!但更重要的是,这本书反映了他的激情,以及他在教人们如何使用Jenkins 方面的长期经验与其他东西。但是不要仅仅相信我的话。你需要自己去读,亲自去感受。
——Kohsuke Kawaguchi
Jenkins 项目创建者及CloudBees 架构师
前言
读者对象
本书针对技术相关的读者(即使他们以往可能没有关于持续集成的经验)。你可能是个刚接触持续集成领域的新人,并想了解它能为你的开发团队带来哪些益处。又或者你可能正在使用Jenkins 或Hudson,并想深入了解如何能进一步地将自己的持续集成架构进行提升。
本书主要在Java 以及JVM 相关项目的范围内讲解Jenkins。但是如果你正使用其他技术架构,本书将为你展示Jenkins 持续集成的优秀生态。我们会讨论如何使用多种非Java技术进行项目构建,包括Grails、Ruby on Rails 以及.NET。除此之外,还有诸如综合配置、通知、分布式构建和安全等均良好地支持多种国际语言。
书籍编排
持续集成就像很多东西:你投入得越多,就能得到越多的价值。即使搭建一个基本的持续集成,也将能为你的团队流程改进起到积极的作用,它还有着逐步接收及实现一些更高级技术的显著优势。本书会逐渐深入Jenkins 的持续集成世界,从易到难。在第1 章中,我们从Jenkins 的全面概述开始,从全局角度进行了解。之后,我们会介绍如何安装和配置Jenkins 服务器以及如何搭建基本的构建作业。当我们掌握了基本知识后,将继续深入更高级的主题,包括自动化测试、安全性、高级通知技术和代码质量报告。接下来,我们在讨论如何利用Jenkins 使用持续部署之前,将讨论更高级的构建技术,如矩阵构建,以及分布式构建和云端持续集成。最后,我们会介绍维护Jenkins 服务器的一些技巧。
是Jenkins,还是Hudson
Jenkins 从开始直到最近都以Hudson 而被熟知。在2009 年,甲骨文收购了Sun 并继承了Hudson 代码库。在2011 年年初,甲骨文和开源社区之间的关系破裂,该项目被分成两个独立的项目:Jenkins,由大部分原始Hudson 开发人员组成;甲骨文管理的Hudson。
正如书名所示,本书主要关注Jenkins。本书的大部分内容写于分支拆分前,不过拆分后两种产品仍然非常相似。所以,尽管示例和插图通常来源于Jenkins,但大部分讨论的内容却同样适用于Hudson。
字体规范
本书遵循特定的字体使用规则约定。理解这些约定有助于更容易地学习本书。
斜体(Italic)
用于文件名、文件扩展名、URL、应用程序名称、强调和首次介绍的新名称。
等宽字体(Constant width)
用于Java 类名、方法、变量、属性、数据类型、数据库元素以及出现在正文中的代码片段。
加粗的等宽字体(Constant width bold)
用于输入的命令行和高亮显示插入运行示例中的新代码。
等宽斜体(Constant width italic)
用于注释和输出。
命令行规范
本书常常会讨论到命令行指令。当我们在控制台操作时,将得到的输出结果(例如,命令提示或屏幕输出)以普通字符格式显示,命令(输入的)以加粗格式显示。例如:
$ ls -al
total 168
drwxr-xr-x 16 johnsmart staff 544 21 Jan 07:20 .
drwxr-xr-x+ 85 johnsmart staff 2890 21 Jan 07:10 ..
-rw-r--r-- 1 johnsmart staff 30 26 May 2009 .owner
-rw-r--r--@ 1 johnsmart staff 1813 16 Apr 2009 config.xml
drwxr-xr-x 181 johnsmart staff 6154 26 May 2009 fingerprints
drwxr-xr-x 17 johnsmart staff 578 16 Apr 2009 jobs
drwxr-xr-x 3 johnsmart staff 102 15 Apr 2009 log
drwxr-xr-x 63 johnsmart staff 2142 26 May 2009 plugins
-rw-r--r-- 1 johnsmart staff 46 26 May 2009 queue.xml
-rw-r--r--@ 1 johnsmart staff 64 13 Nov 2008 secret.key
-rw-r--r-- 1 johnsmart staff 51568 26 May 2009 update-center.json
drwxr-xr-x 3 johnsmart staff 102 26 May 2009 updates
drwxr-xr-x 3 johnsmart staff 102 15 Apr 2009 userContent
drwxr-xr-x 12 johnsmart staff 408 17 Feb 2009 users
drwxr-xr-x 28 johnsmart staff 952 26 May 2009 war
在必要时,在一行结尾的反斜杠字符用于代表一行的结束:如果你愿意,可以在一行中全部输入(没有反斜杠)。不要忘记忽略换行后的起始字符“>”——它是UNIX 提示字符。
$ wget -O - http://jenkins-ci.org/debian/jenkins-ci.org.key \
> | sudo apt-key add –
为了一致性,除非我们在讨论Windows 的问题,否则都将采用UNIX 风格的命令提示符(美元符号“$”),如下所示:
$ java -jar jenkins.war
或
$ svn list svn://localhost
然而,除非我们说明用另外的方式,否则Windows 用户可以安全地在Windows 命令控制台使用这些命令:
C:\Documents and Settings\Owner> java -jar jenkins.war
或
C:\Documents and Settings\Owner> svn list svn://localhost
贡献人
本书不是我独自写的。相反,它是由多人分工协作完成的。特别是以下人员慷慨地贡献了自己的宝贵时间、知识和协作技巧,使得本书更加完善:
Evgeny Goldin 是一位出生于俄国而生活在以色列的软件工程师。他带领并负责汤森路透(Thomson Reuters)开发人员的诸多工作,其中一些直接关系到Maven、Groovy 以及如Artifactory、Jenkins 的构建工具。他有丰富的经验和技术,包括Perl、Java、JavaScript 和Groovy。构建工具和动态语言是Evgeny 最喜欢的,他经常用到、展示并写进博客。最近他正在为GroovyMag 杂志撰写Methods&Tools,同时还运行维护了他自己的两个开源项目:Maven-plugins(http://evgeny-goldin.com/wiki/Maven-plugins)和GCommons(http://evgeny-goldin.com/wiki/GCommons)。他的博客地址是http://evgeny-goldin.com/blog,还能用@evgeny_golin 在Twitter 上找到他。
Evgeny 贡献了第10 章的自动生成Maven 构建作业内容。
Matthew McCullough 是一个精力充沛的人,拥有15 年企业级软件开发及开源教育经验,他同时还是一家位于丹佛名为Ambient Ideas 的咨询机构的联合创始人之一。Matthew 现在是GitHub.com 的培训师,是O’Reilly 出版的Git Master Class 系列书的作者。其在30 多个国家和国际会议上发表过演讲,他还是DZone RefCards 排名前十的作者,也是丹佛开源用户组主席。他目前的研究课题是项目自动化:构建工具(Maven,Leiningen,Gradle)、分布式版本控制(Git)、持续集成(Jenkins)以及代码质量度量(Sonar)。Mat thew 和他美丽的妻子以及两个年幼的女儿一起居住在科罗拉多州的丹佛,他几乎积极参与科罗拉多州的任何一项室外活动。
Matthew 撰写了第5 章的Jenkins 集成Git 部分的内容。
Juven Xu 是一位来自中国的在Sonatype 工作的软件工程师。他是一个活跃的开源社区成员、Maven 认证专家。Juven 还负责Maven:The Definitive Guide 的中文翻译,这本书被当作Maven 项目上最原始的中文参考手册。他当前也在致力于本书的中文翻译工作。
Juven 撰写了第8 章中的IRC 通知部分。
Rene Groeschke 是Cassidian Systems(原名EADS Deutschland GmbH)公司的一名软件工程师,也是位开源爱好者。他拥有七年多个Java 企业级项目开发工作经验的认证ScrumMaster,他特别关注于敏捷方法,如持续集成和测试驱动开发。除了日常工作,腓特烈港的Corporate Education 大学还聘请他为信息技术专业本科学生进行Scrum 及其相关课题的讲座。
Rene 撰写了第5 章Gradle 构建项目部分。
评审小组
这本书的技术评审过程采取的方法与其他大部分图书有些不同。不是让一两个技术评审人在本书撰写工作接近尾声时通读全书,而是让一队Jenkins 社区的志愿者,包括很多核心Jenkins 开发人员在本书撰写的时候就可以阅读一些章节的内容。这个评审小组由以下人员组成:Alan Harder,Andrew Bayer,Carlo Bonamico,Chris Graham,Eric Smalling,Gregory Boissinot,Harald Soevik,Julien Simpson,Juven Xu,Kohsuke Kawaguchi,Martijn Verberg,Ross Rowe,Tyler Ballance。
图书赞助商
因为众多组织给予了撰写图书过程的资金帮助,所以本书得以顺利完成。
Wakaleo 咨询
Wakaleo(http://www.wakaleo.com)是一家咨询公司,帮助企业优化他们的软件开发流程。由John Ferguson 领导,他是本书和Java Power Tools(http://oreilly.com/catalog/9780596527938)的作者,Wakaleo 咨询提供Java 敏捷开发和测试实践、软件开发生命周期优化以及敏捷方法论的咨询、培训和顾问服务。
Wakaleo 在一些如持续集成、构建自动化、测试驱动开发、自动化Web 测试和代码整洁领域提供帮助并培训企业,使用的开源工具包括Maven、Jenkins、Selenium 2 和Nexus。Wakaleo 咨询也提供公共和现场关于持续集成和持续部署、构建自动化、代码整洁实践、测试驱动开发和行为驱动开发的培训,以及Scrum 开发(CSD)认证课程。
CloudBees
CloudBees(http://www.cloudbees.com)是唯一一家专注于云端完整的Java Web 应用程序开发- 部署生命周期服务的云公司。这个公司也是Jenkins/Hudson 持续集成工具世界上首屈一指的专家。
Jenkins/Hudson 创建者Kohsuke Kawaguchi 领导了全球CloudBees 专家小组。他们创造了Nectar,一个订阅预置且支持增强的Jenkins 版本。如果你依赖Jenkins 处理关键软件流程,Nectar 提供高度测试、稳定且全方位支持的Jenkins 版本。它还包括Nectar 独有的功能,如自动调整VMware 虚拟机。
如果你准备探索云端持续集成,CloudBees 将Jenkins/Hudson 集成进它的DEV@cloud构建平台的一部分。从Jenkins 开始并不需要前期在构建服务器方面花费大量投资,且没有性能限制和维护麻烦。当一个应用已经准备上线,你只需轻点几次鼠标就能将其作为服务部署到CloudBees 的RUN@cloud 平台。
使用CloudBees 的DEV@cloud 和RUN@cloud 服务,你无须担心服务器、虚拟机以及IT 人员。和Nectar 一起用,你会喜欢对Jenkins 最强大的、稳定的支持。
Odd-e
Odd-e(http://www.odd-e.com)是个亚洲公司,以创新的方法构建产品并帮助别人实现相同的目标。其团队由有经验的教练和产品开发人员组成,他们在工作中一致追求迭代、敏捷、简洁、精致的价值观,公司的组织架构也是如此。例如,Odd-e 没有一个层次性组织,也没有管理人员为他人做决定。相反,个人自我组织并且使用所有的技能来提高其竞争力。公司提供培训和后续督导帮助他人寻求更好的工作方式来合作。
不是工作而是价值观让Odd-e 凝聚在一起。它的成员喜欢构建软件以及价值观的学习和贡献,而不是利润最大化,并致力于支持亚洲开源的发展。
使用代码示例
本书是一本开放源代码的书,在创作共用许可证(Creative Commons License)下出版。本书的英文原版书用DocBook 编写,使用XmlMind。这本书的源代码可以在https://github.com/wakaleo/jenkins-the-definitive-guide-book 的GitHub 找到。
本书中的Jenkins 项目使用的示例是开源的并且可以在网上免费获得——在http://www.wakaleo.com/books/jenkins-the-definitive-guide 提供了更多细节性的指导。
本书的目的是帮助你完成工作。一般情况下,你可以在自己的程序和文档中使用本书的代码。除非你复制大量的代码,否则不必与我们联系许可。例如, 使用本书的几块代码编写程序不需要许可。销售或分销O’Reilly 图书光盘的例子需要许可。引用这本书和引用示例代码来回答问题不需要许可。把来自本书的大量示例代码应用到你的产品文档确实需要许可。
我们对注明版权归属的行为表示赞赏,但不强制要求。一个归属通常包括作品名称、作者、出版商和ISBN。例如,“Jenkins: The Definitive Guide by John Ferguson Smart (O’Reilly).Copyright 2011 John Ferguson Smart,978-1-449-30535-2.”
如果你觉得自己的示例代码使用不在正当使用或上面给出的许可范围内,请随时与我们联系:permissions@oreilly.com。
Safari? Books Online
Safari Books Online 是一个按需点阅的数字图书馆,可让你轻松地搜索超过7500 种技术和创造性的参考书籍和视频,并快速找到所需的答案。
有了订阅,你可以阅读任何页面,并从我们的在线图书馆观看任何视频。阅读你的手机和移动设备上的书。访问新的标题之前,它们可供打印,并获得独家访问的开发手稿和作者的反馈。复制和粘贴示例代码,整理你最喜欢的书籍,下载章节,标记关键部分,创建注释,打印页面,并从其他节省时间的特性上受益。
O’Reilly 媒体把这本书上传到了Safari Books Online 服务。为了获取该书的全部数字访问权限以及O’Reilly 和其他出版商的其他类似主题, 可免费注册http://my.safaribooksonline.com。
联系我们
请将对本书的评价和发现的问题通过如下地址告知出版者。
美国:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)
奥莱利技术咨询(北京)有限公司
我们有这本书的网页,在那里我们列出了勘误表、实例和任何附加的信息。你可以访问此页:
http://www.oreilly.com/catalog/9781449305352
评论或询问这本书的技术问题,请发送电子邮件至:
bookquestions@oreilly.com
关于书籍、课程、会议和新闻的更多信息,请访问我们的网站:http://www.oreilly.com。
在Facebook 找到我们:http://facebook.com/oreilly
在Twitter 跟随我们:http://twitter.com/oreillymedia
在YouTube 上观看我们:http://www.youtube.com/oreillymedia
致谢
首先,要感谢我的好妻子Chantal 以及孩子们James 和William,没有你们的爱、支持和宽容,这本书是不可能完成的。
我要感谢Mike Loukides 再次和我一起从事这本书以及整个O’Reilly 团队高标准的工作。
谢谢Kohsuke Kawaguchi 创建了Jenkins,并一直是这个伟大产品背后的驱动力。还要感谢Francois Dechery、SachaLabourey、Harpreet Singh 以及CloudBees 团队其他成员的帮助和支持。
我也很感谢那些花了时间和精力为本书做出贡献的人:Evgeny Goldin、Matthew McCullough、Juven Xu 以及 Rene Groeschke。
非常感谢下面的审稿人,他们在整个写作过程中,提供了宝贵的反馈意见:Alan Harder,Andrew Bayer,Carlo Bonamico,Chris Graham,Eric Smalling,Gregory Boissinot,Harald Soevik,Julien Simpson,Juven Xu,Kohsuke Kawaguchi,Martijn Verberg,Ross Rowe,Tyler Balance。
感谢Andrew Bayer、Martijn Verburg、Matthew McCullough、Rob Purcell、Ray King、Andrew Walker 等人,他们的讨论和反馈给了我此书的灵感和想法。
还有许多人对本书的顺利完成提供了各种帮助,这使本书比原来更加丰富和完整:Geoff and Alex Bullen,Pete Thomas,Gordon Weir,Jay Zimmerman,Tim O’Brien,Russ Miles,Richard Paul,Julien Simpson, John Stevenson,Michael Neale,Arnaud Héritier,Manfred Moser。
最后十分感谢Hudson/Jenkins 开发人员和用户社区持续的鼓励和支持。