Jenkins 2权威指南(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-11 23:05:32

点击下载

作者:(美)Brent Laster(布伦特·莱斯特)

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Jenkins 2权威指南

Jenkins 2权威指南试读:

前言

如何使用本书

这本书很大——比我曾经预想的还要大。我也曾经有一定程度的担心,但是最后决定以两种方式之一往下写:要么限制必要的内容写成一个基本的指导书籍,要么花一些篇幅解释概念、创建代码示例以及探究流水线即代码中术语、函数以及程序的真正含义。如果你已经浏览了本书,你大概能够推断出我选择了后者。

我这样做的原因,出于我多年培训人们使用Jenkins的经验。在一个时间很短的课堂或者工作坊中,我们只能涵盖少量主题。但是人们总是渴望获得更多——更多的细节以及他们可以应用的示例。在大会演讲结束后,我一定会遇到很多人询问更多信息来源、示例,以及在哪里能够找到这样或那样的信息等。这些通常可以通过Google搜索或者查看Stack Overflow上的问题得到解决。这没有什么问题,但也不是最方便的方法。

这本书旨在帮助你找到如何使用这个强大技术的答案。诚然,它比DevOps更加技术化,但是有可能你在阅读本书的时候,已经掌握了一些持续集成(CI)、持续部署(CD)、DevOps以及Jenkins的知识,并且正在寻找如何充分利用Jenkins新特性的方法。

所以,下面列出了一些指导原则(你可以随意使用它们,或者根据你的情况忽略它们)。

· 不要试图通读整本书——除非你需要获得更多的睡眠。

· 浏览目录中的内容。章节的标题可以示意它的全部内容。

· 如果你想理解基本思路并且想很快上手的话,阅读前两章并开始使用一些基本的流水线。当你遇到疑问或者问题时,查阅本书中相应的章节即可。

· 如果你已经熟悉基本的Jenkins用法并且想转换为流水线即代码,查看第10章的内容可以获得一些关于转换的思路,然后根据需要查看其他章节。

· 如果你着手创建一个更大的流水线,查看一下关于转换的章节以及关于集成操作系统和其他技术的章节(第10~14章)。同时不要忘记了安全性——也有一个章节是关于它的(第5章)。

· 如果你着手自动化Jenkins,可查看第15章。

· 如果你遇到了问题,每一章都包含一些有可能帮助到你的细节。查看那些注释、警告以及扩展内容,以获得关于异常状况或功能的信息(有可能使你困惑或者提供一种你没有考虑到的思路)。本书的最后也有一个章节,包含关于更多通用故障排查的内容。

我坦然承认任何技术书籍都具有的一个问题,那就是技术在快速进化中。在撰写本书章节的历程中,我时常要回过头来试图追赶上最新的变化和创新,视情况进行修改。我坚信本书中的材料将会提供给你一个良好的基础和参考去使用Jenkins 2。但是,你也应该经常查阅最新的社区文档以获得更新和新的创新内容。

最后,有一个请求——即使你不需要阅读本书的大部分内容,如果你发现你阅读的部分有用,也请花一点时间发表一个评论。人们寻找有用书籍的方法就是口头传颂和在线评论。你的评论将会产生极大的影响。

谢谢,我希望在未来的培训或者大会中见到你。

排版约定

本书使用了下列排版约定。

中文楷体或英文斜体(Italic)

表示新的术语、URL、邮件地址、文件名称和文件扩展名。

等宽字体(Constant width)

表示程序片段,也可以用在正文中表示变量名或函数名等程序元素、数据类型、环境变量、语句和关键词等。

等宽字体加粗(Constant width bold)

表示应该由用户输入的命令或其他文本。

<尖括号中的等宽字体>(

表示文本应该被替换为用户提供的值或根据上下文决定的值。该图标表示提示或建议。该图标表示一般注释。该图标表示警告或注意。

使用代码示例

本书的下载资源(代码示例、练习等)可以到https://resources.oreilly.com/examples/0636920064602处获得。

本书将对你的工作有所帮助。一般来说,本书提供的示例代码,你都可以在你的程序和文档中使用。你不必联系我们获得许可,除非你要大量传播代码。例如,从本书中抄录一些代码用于编写程序不需要许可;销售或分销O'Reilly随书附带的代码则需要许可;引用本书中的内容和示例用于回答问题不需要许可;将本书中的大量示例代码插入你的产品文档中则需要许可。

我们感谢但不要求注明出处。出处的格式一般包括标题、作者、出版商和ISBN。例如,“Jenkins 2: Up and Running by Brent Laster (O'Reilly).Copyright 2018 Brent Laster,978-1-491-97959-4.”。

如果你觉得示例代码的使用不合法或者不符合以上的许可权限,请随时联系我们:permissions@oreilly.com。

关于本书代码示例的重要提示

本书中的代码经常出现单行代码太长而超出页面宽度的情况。在这种情况下,代码会被“挤”到下一行,这些行中一般没有续行字符。然而,你可以通过命令的语义或者缩进来判断哪些是连续多行代码。

关于本书中图表的提示本书中使用了很多截屏和图表来帮助读者澄清一些信息。这些可视化元素的质量和比例取决于获取它们的方法。同时,由于Jenkins社区会频繁地发布应用和插件的更新版本,本书中的可视化呈现可能会发生变化。

O'Reilly Safari

Safari(原名Safari Books Online)是一个服务企业、政府、教育机构以及个人的基于会员制的培训参考平台。

会员有权限获取成千上万的书籍、培训视频、学习路径、交互式指南以及来自超过250家出版商的作品清单,包括O'Reilly Media、Harvard Business Review、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Adobe、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett以及Course Technology等。

更多的信息请访问http://oreilly.com/safari。

如何联系我们

请将对本书的评价和存在的问题通过如下地址告知出版者:

美国:

O'Reilly Media,Inc.

1005 Gravenstein Highway North

Sebastopol,CA 95472

中国:

北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)

奥莱利技术咨询(北京)有限公司

O'Reilly的每一本书都有专属网站,你可以在那里找到关于本书的相关信息,包括勘误列表、示例代码以及其他信息。本书的网站地址:http:/bit.ly/Jenkins-2-ur。

对于本书的评论和技术性的问题,请发送电子邮件到:bookquestions@oreilly.com。

关于我们的书籍、课程、会议和新闻的更多信息,请参阅我们的网站http://www.oreilly.com。

在Facebook上找到我们:http://facebook.com/oreilly

在Twitter上关注我们:http://twitter.com/oreillymedia

在YouTube上观看我们:http://www.youtube.com/oreillymedia

致谢

本书最大的感谢要给予Jenkins社区。Jenkins证明了社区开发、社区支持的软件也可以具有难以置信的实用性、多功能性及高质量。所有为Jenkins做出贡献或者在开发插件、培训资料、答疑解惑,以及版本推广等方面发挥作用的人,谢谢你们。

在个人方面,有太多的人需要感谢。我所能想到的方式就是通过粗略的分类一一罗列出来。

感谢Kohsuke Kawaguchi创建了Hudson以及后来的Jenkins,感谢你同意为本书撰写推荐序。通过社区以及CloudBees,你所带给Jenkins的技术驱动力和领导力已经对我们如何创建和交付软件产生了巨大的积极影响。

感谢技术编辑Patrick Wolfe、Brian Dawson及Chaim Krause。他们花费了大量的时间审阅本书,非常感谢。有了他们的反馈,内容才变得无限完美。

Patrick Wolfe从本书的初期就开始致力于提供技术更新以及其他信息。这非常有帮助,确保了这本书可以如期望地与当前的Jenkins状态保持同步(至少在本书发行之时)。他的输入是无价的,我非常感谢他为此花费的时间以及对本项目的无私奉献。

Brian Dawson也提供了很大的帮助,尤其在标注变化以及本书针对Jenkins用户可以更加完善的地方。Brian和Patrick都在CloudBees工作,他们把公司关注的焦点无私地反馈给了Jenkins社区。

Chaim Krause是我认识的最敬业的人之一。至今我已经与他合作了两本书,我非常感谢他对细节的努力和专注。他花费时间亲自试验,并且指出哪里的用词或示例需要更新或者不合理。书中一些细节问题都归功于他的纠正。

非常感谢O'Reilly的所有员工。首先,感谢编辑Brian Foster给本书一个出版机会以及整个过程中的大力支持。感谢Angela Rufino帮助本书如期步入正轨,回答我的所有问题,以及对本书整个过程自始至终的把控。同时也要感谢Nan Barber对本书的早期编辑工作。

同样感谢文字编辑Dwight Ramsey和Rachel Head,他们使我的书更加易读和清晰。感谢生产编辑Justin Billing和校对员Jasmine Kwityn把所有内容汇总在一起,创造了最终的完美作品。

本书中的很多材料最初分享和打磨于我为O'Reilly的Safari平台提供的在线培训课堂上以及会议工作坊中。感谢Susan Conant(与Brian Foster一起)聆听我对Jenkins 2在线培训的想法以及帮助开发课程。同时要感谢 Virginia Wilson给我提供额外的围绕CI和CD写作的机会,也要感谢会议举办者Rachel Roumeliotis和Audra Carter 对会议过程的指导。

最后对于O'Reilly,我还想感谢那些对我围绕Git和Jenkins的很多在线培训提供支持的培训人员。感谢Yasmina Greco、Lindsay Ventimiglia、Nurul Ishak及Shannon Cutt 监督所有的培训并保证一切按照专业的方式走上正轨。

如果我在会议这边没有提及Jay Zimmerman,那真的是怠慢了。Jay是“No Fluff Just Stuff”系列会议的创办者和组织者,也是第一个提供给我跨企业或者在全美国演讲Jenkins机会的人。

感谢SAS的管理层对我这么多年来创立和展示企业培训课程的支持,尤其感谢Glenn Musial、Cyndi Schnupper及Andy Diggelmann对我的鼓励和支持。

感谢参加过我的Jenkins培训或工作坊的所有人,尤其感谢那些提出问题并且/或者提供反馈从而让我思考更多主题和方式来改进内容的人。

我谨代表Jenkins社区,对工作在CloudBees的那些推进Jenkins、答疑解惑,以及给我们所有用户提供文档的人表示感谢,对你们的努力表示感激。有太多的人需要感谢,其中有些名字在我为写作本书调研的时候就反复提及了,包括Patrick Wolfe、Jessie Glick、Andrew Bayer、James Dumay、Liam Newman及James Brown。如果你看到这些人写的内容,阅读一下,一定能学到有用的东西。同时也要感谢Max Arbuckle协调Jenkins World会议,很多关于Jenkins 2的信息都是在该会议上首次呈现的。

最深的感谢应该给予我的妻子Anne-Marie以及我的孩子们。这本书的写作经历了很长一段时间,主要是夜间和周末,“剥夺”了我陪伴他们的时间,同时我所写的东西对他们来说也非常陌生。尽管如此,他们始终鼓励我。Anne-Marie,你是我最强大的后盾和力量源泉,因为你是我的一切。谢谢你帮助我平衡生活、梦想和工作,帮我打理得井井有条。我由衷地感激在我们生活的每一天你所带给我的仁慈、爱意以及灵感。

最后,感谢阅读本书的读者。我真诚地希望你们能从本书中获得价值,希望本书能够帮助你们在使用Jenkins以及其他相关方面取得进步。第1章 Jenkins 2简介

欢迎来到《Jenkins 2权威指南》,无论你是构建管理员、开发人员、测试人员,还是其他任何角色,本书都是你学习Jenkins演变的最佳选择。通过本书,你可以轻松地使用Jenkins 2的新特性来设计、实现和执行流水线,在灵活性、管控和易于维护等方面的提升都是之前版本的Jenkins所无法想象的。同时,无论身处何种角色,你都能快速地从这些新特性中受益。

如果你是开发人员,编写流水线即代码(pipeline-as-code)会更加舒适和自然。如果你是DevOps专家,维护流水线将变得更加简单,因为流水线和其他任何类型的代码一样可以驱动核心流程。如果你是测试人员,并行任务等新特性同样可以让你受益匪浅,减轻工作负担。如果你是管理者,你可以像对待源码一样来确保流水线的质量。如果你是Jenkins用户,你可以显著地提升技能,并且为流水线即代码的进化做好准备。

为了实现这些目标,需要理解和规划已有功能向新特性过渡。Jenkins 2对于传统的基于表单的Jenkins版本而言,有明显的改变。而伴随这种改变引入了大量需要学习的知识点,好在这些都在可控范围内。作为即将迈出的第一步,我们需要对Jenkins 2的基本原理(Jenkins 2是什么?哪些是最核心的功能?)打下坚实的基础,其中包括新特性、工作空间的变化点以及一些全新的概念。这些正是本章和第2章的内容。其中的部分内容你可能已经耳熟能详,这样的话就太棒啦。不过我还是建议你快速浏览一下这些熟悉的章节,因为其中会有一些全新和有变化的内容值得你了解。

在本章中,我们会从顶层设计探寻是什么让Jenkins 2变得与众不同,它又是如何契合我们所熟识的领域的。我们将关注如下3个关键领域。

· Jenkins 2是什么,新版本带来了哪些重要的新特性和功能点?

· 是什么原因(理念和动机)让Jenkins发生改变?

· Jenkins 2如何兼容以前的版本,有哪些兼容性方面需要关注?

下面让我们先来看看Jenkins 2和传统的Jenkins相比有哪些不同之处。Jenkins 2是什么

在本书中,Jenkins 2的概念比较宽泛。在特定的上下文环境中,它用来泛指支持流水线即代码及其他类似Jenkinsfile等新特性的新版Jenkins,这些新特性将始终贯穿本书。

其中的部分特性在Jenkins 1.X版本中已经通过插件的方式实现(确切地讲,Jenkins 2也是通过对已有插件的重点升级和新插件的引入来获得新功能的)。但是Jenkins 2则更进一步,它将这些特性视为一种同Jenkins交互的核心方式,并且也是Jenkins推荐的方式。相比之前用户只能通过Web界面进行配置的方式来定义Jenkins任务,现在通过使用Jenkins DSL和Groovy语言编写程序,用户可以定义流水线并执行各种任务。

这里提到的DSL代表领域特定语言(Domain-Specific Language),可以理解为一种适用于Jenkins的“编程语言”。DSL基于Groovy实现,并通过概念和结构封装了Jenkins的特定功能。举例来说,关键字node表示以编程方式来选择节点(也就是主节点和从节点),并且程序中的这部分功能将在该节点上执行。Jenkins和GroovyJenkins在很早之前就内建了Groovy引擎,并且通过这种方式允许高级脚本操作,提供Web界面上不可见的功能和访问权限。

DSL是Jenkins 2的核心组件,作为构建模块让其他核心的用户导向特性成为可能。让我们来大致看下这些特性如何使Jenkins 2区别于传统版本的Jenkins。我们会快速体验一种全新的方式,将原本写在Jenkins中的代码提取到一个Jenkinsfile文件中,以一种更加结构化的方法来创建工作流——声明式流水线,同时还有一个更加令人兴奋的全新用户界面——Blue Ocean。Jenkinsfile

在Jenkins 2中,流水线配置可以从Jenkins中分离出来。在以前版本的Jenkins中,任务配置都是以配置文件的形式保存在Jenkins的主目录中的。这就意味着所有的配置变更都依赖于Jenkins可以识别和管理这些文件(除非你想直接修改XML文件,但这是非常有挑战性的事情)。在Jenkins 2中,你可以在Web可视化界面的文本区中以DSL脚本来编写流水线配置。当然,你同样可以将这些文本形式的DSL代码和其他保存源码的文本文件一起保存在外部的版本控制系统中。这使得你可以像管理其他源码一样通过文件的形式来管理Jenkins任务,支持历史追溯、差异对比等功能。JobConfigHistory插件基于完备性的角度,我应该提到Jenkins中有一个叫作JobConfigHistory的插件,这个插件可以追溯XML配置的历史版本信息,并且允许你查看每次变更的内容。关于这个插件的信息,在Jenkins的Wiki中有更加详细的描述。

Jenkins 2推荐使用名为Jenkinsfile的文件保存任务配置和流水线信息。不同的项目和分支都会有自己的Jenkinsfile,其内容各不相同。你可以将全部代码写在一个Jenkinsfile中,也可以通过共享库的方式调用外部代码。另外,DSL语句也允许在脚本中加载外部代码(关于此部分的更多信息,请参考第6章)。

Jenkinsfile可以起到标记文件(marker file)的作用,这意味着只要Jenkins发现你的工程源码中包含了Jenkinsfile文件,那么这个项目或分支就可以被Jenkins自动解析和运行。Jenkins同样可以识别出需要用到的源码版本控制管理(SCM)项目和分支,并加载和执行Jenkinsfile中的代码。如果你熟悉Gradle构建工具,这个理念与应用中定义的build.gradle文件类似。我会在本书中对Jenkinsfile进行更加详细的描述。

图1-1展示了一个用于源码版本控制的Jenkinsfile的例子。图1-1 一个用于源码版本控制的Jenkinsfile的例子声明式流水线

在以前版本的Jenkins中,流水线即代码大体就是Groovy脚本,其中插入了部分针对Jenkins的DSL步骤。这种方式几乎没有结构上的约束,程序流程也基于Groovy语法结构实现。错误报告和检查同样基于Groovy程序的执行,而非从期望通过Jenkins实现功能的角度来检查。

这种模式现在被称为脚本式流水线。然而,流水线的DSL语言也在不断进化。

在脚本式流水线中,DSL支持为数众多的任务步骤,但是仍然缺失了部分面向Jenkins任务的核心特性,比如,构建后处理、流水线结构错误检查以及基于不同执行状态发送通知的功能。当然大多数功能都可以通过Groovy编程机制来模拟实现,比如trycatch-finally语法。但是这在面向Jenkins编程的基础上对Groovy语言的技能提出了更高的要求。图1-1中的Jenkinsfile展示了带有try-catch的做通知处理的脚本式流水线样例。

在2016年和2017年间,作为Jenkins主要贡献者的企业级公司CloudBees引入了一种高级流水线即代码的编程语法,这就是声明式流水线。这种语法为流水线带来了一种清晰、可预期的结构,以及更强大的DSL元素和结构体。这种方式更加接近通过Web界面构建流水线的工作方法(即自由风格类型项目)。

这里有一个构建后过程的示例,现在我们可以使用内建的DSL机制,通过简单定义就能实现基于构建状态发送通知的功能。这减少了使用Groovy代码提供流水线定义来模拟传统Jenkins特性的需求。

声明式流水线更加严谨的结构同样有助于错误检查。于是我们不再需要在发生错误时查看Groovy的调试信息(traceback),而是将错误信息以更加直观、简单的方式展现给用户,在大多数情况下可以直接定位到具体的错误。图1-2给出了具有增强错误检查功能的声明式流水线所输出的代码片段:图1-2 具有增强错误检查功能的声明式流水线Blue Ocean界面

声明式流水线的结构同时也是Jenkins 2的另一项创新——Blue Ocean,全新Jenkins可视化界面——的基础。Blue Ocean为流水线的每个阶段添加了图形化展示,可以显示成功/失败和进展等标识,并对每个任务都提供了点选式日志查看功能。Blue Ocean还提供了一个简单的可视化编辑器。图1-3展示了一个在Blue Ocean中成功运行的流水线及其日志显示的例子。第9章将会详细介绍Blue Ocean的全新界面。图1-3 Blue Ocean界面里的一个运行成功和查看日志的例子Jenkins 2的全新任务类型

Jenkins 2增加了一些新的任务类型,主要是围绕利用流水线即代码和Jenkinsfile等关键功能来设计的。这些类型比以往任何时候都更容易自动化任务、流水线创建以及组织项目。每个新任务/工作项/项目的创建都以相同的方式开始。

新的任务类型和插件

这里需要说明一下,只有安装了相关插件,才能拥有这些新的任务类型。如果你在Jenkins 2初始化安装向导中选择了安装系统推荐的插件,才可以使用这里讨论的任务类型。

一旦安装了Jenkins 2并登录成功,就可以像以前一样创建新的任务。如图1-4所示,欢迎来到Jenkins!欢迎标语下面有一个建议用户新建任务的链接,这个链接对应菜单栏里面的新建工作项。在绝大多数情况下新建工作项就是指项目。在本书中将交替使用“任务”、“工作项”和“项目”这几个术语。图1-4 Jenkins欢迎页:新建任务、工作项和项目的入口

当选择在Jenkins 2中创建一个新的工作项时,屏幕中会提示选择新建任务的类型(见图1-5)。你会看到一些熟悉的类型,比如,自由风格类型项目,同时还有一些你以前没见过的类型。在这里先简要罗列一下新的任务类型,然后会在第8章中进行详细的解释。图1-5 Jenkins 2的项目选项

流水线

顾名思义,流水线类型的项目旨在创建流水线。这是通过Jenkins DSL编写代码来实现的。流水线项目是我们在本书中主要讨论的项目类型。

正如已经指出的,流水线既可以用“脚本式”语法风格编写,也可以用“声明式”语法风格编写。这种项目类型的流水线可以很容易地转换成Jenkinsfile。

文件夹

这是一种可以把多个项目归类到一起的方式,而不是项目本身的类型。请注意,这并不像Jenkins仪表板上传统的“视图”选项卡那样,让你按照项目列表筛选。更确切地说,它就像操作系统中的目录文件夹。文件夹名称是项目路径的一部分。

组织

有些源码版本控制平台提供了将多个代码库聚合成“组织”的机制。Jenkins集成允许将Jenkins流水线脚本存储为组织内代码库中的Jenkinsfile文件,并基于这些库执行。目前已经支持GitHub和Bitbucket平台的组织功能,未来将会逐步支持其他的平台。为简单起见,在本书中主要以GitHub的组织项目作为例子。

假设有足够的访问权限,Jenkins可以在代码托管侧自动建立一个组织的webhook(来自网站的通知),从而任何代码库中的变更都会通知Jenkins实例。当Jenkins收到通知时,它会检测代码库中作为一种标记而使用的Jenkinsfile文件,并执行其中的命令来运行流水线。

多分支流水线

在这种类型的项目中,Jenkins再次使用Jenkinsfile作为标记的功能。在一个有Jenkinsfile的项目中,如果创建了一个新的分支,Jenkins将自动基于这个新分支创建一个新项目。此类型项目可应用于任何Git或SVN代码库。

在本书的第8章中,我们将详细介绍每一个新的项目类型。然而,值得注意的是,Jenkins仍然支持之前的自由风格类型项目,仍然可以使用基于Web的表单创建任务,并像以前一样执行它们。但Jenkins 2更加关注的是流水线任务。

很容易看出,相对于传统的Jenkins模式,Jenkins 2发生了重大转变。因此,值得花几分钟来讨论转变的原因。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载