Jenkins常见问题集锦(八)


问题36:Hudson和Jenkins是什么关系?

参考:两者都是采用Java语言编写的持续集成开源工具。

实际上,Jenkins是Hudson的一个分叉(fork)。

Hudson由Sun公司在2004年启动,第一个版本于2005年在java.net发布。

2007年开始Hudson逐渐取代CruiseControl和其他的开源构建工具的江湖地位。

在2008年的JavaOne大会上在开发者解决方案中获得杜克选择大奖。

在2010年11月期间,因为Oracle对Sun的收购带来了Hudson的所有权问题。

主要的项目贡献者和Oracle之间,尽管达成了很多协议,但有个关键问题就是商标名称“Hudson”。

甲骨文在2010年12月声明拥有该名称并申请商标的权利。

因此,2011年1月11日,有人要求投票将项目名称从“Hudson”改为“Jenkins”。

2011年1月29日,该建议得到社区投票的批准,创建了Jenkins项目。

2011年2月1日,甲骨文表示,他们打算继续开发Hudson,并认为Jenkins只是一个分支,而不是重命名。

因此,Jenkins和Hudson继续作为两个独立的项目,每个都认为对方是自己的分支。

到2013年12月,GitHub上的Jenkins拥有567个项目成员和约1,100个公共仓库,与此相对的Hudson有32个项目成员和17个公共仓库。

到现在两者的差异更多,应该说Jenkins已经全面超越了Hudson。

此外,大家可能是出于讨厌Oracle的情绪,作为Java开发者天然地应该支持和使用Jenkins。

从两个项目的logo,大家也可以看到两个项目之间的亲戚关系,都是两个老头。后来Hudson被Oracle捐给了Eclipse基金会,所以Hudson老头有个Eclipse的光环加持。

Hudson已经停止开发,多年没有发布新版本(最新的版本发布于2016年),而Jenkins的社区和开发却异常活跃,Jenkins 2.x版本更是将其扩展到CD领域。

Jenkins1已是目前市场上使用最多的CI/CD工具。

问题37:Jenkins的插件和共享库有什么异同点?什么时候用插件,什么时候用共享库?

参考:共享库是Pipeline类型任务才能使用的特性。

插件侧重于扩展Jenkins系统本身的功能,范围更广。如定义新的任务类型(Pipeline就是通过插件实现的),新的参数类型,新的触发器类型,新的SCM类型,新的通知类型,新的权限策略,新的云类型等等。

插件也可以定义新的构建步骤,在freestyle任务中以图形界面方式配置,可以通过优化兼容Pipline任务,通过DSL方式调用。

Pipeline也有专门的API,用来定义新的DSL步骤(只能通过代码方式调用)。

插件使用Java语言编写,共享库使用Groovy语言编写,共享库中又可以调用插件提供的DSL步骤。

插件的使用需要将插件包安装到Jenkins master上才能生效,如果是升级,还需要重启master。

共享库则是在Jenkins系统中配置好共享库的地址即可使用,并且可以指定使用不同的分支。共享库代码的修改可以实时生效。

最佳实践来讲,插件提供工具级别的通用步骤(积木),共享库实现功能步骤(搭积木),对步骤进行组合,在多个Jenkins任务间共享。类似于API和APP的关系。

问题38:Jenkins什么都能做吗?

参考:明确Jenkins是一个自动化服务器。它可以让你的操作自动化,自动主要包括三个部分,一个是触发自动化,可以通过一定的规则设置自动触发Jenkins任务。 比如定时触发,或者代码库有变更提交时触发,或者代码库内容有变化时触发等等。第二个则是执行自动化;第三个是通知自动化。而第二部分内容是用户自己定义的,Jenkins的便利之处是支持 各种方式来调用自动化脚本。如ant、maven、sh、bat、powershell、python、groovy等,而自动化脚本是需要用户自己去编写的。 只有先把操作改造后可以通过自动化脚本实现后,才能将其对接到Jenkins上,让其自动执行。所以Jenkins工程师应十分熟悉自动化原则和各类自动化脚本语言和自动化工具,并为团队的​操作自动化工作提供建议和指导。​

问题39:slave、node、agent是什么关系,有区别吗?

参考:概念上基本同意。agent可以看作slave的新称呼(因slave有奴隶的意思……)。用法上,作为Pipeline关键字有少许区别。 在脚本式流水线中,使用node来指定执行节点;在声明式流水线中,是使用agent关键字,agent关键字下面又有node、docker、kubernetes等关键字。

问题40:Jenkins如何对接Ant、Maven等工具?

参考:此类构建工具在Jenkins中有两种使用方法。

一种是在Jenkins全局工具配置中进行预配置,设置工具名称和路径,使用时指定名称。 这种方式的优点是Jenkins可以自动将构建工具安装到agent机器上,并将可执行文件添加到PATH目录。 不便之处是需要预配置,使用时需要显示指定名称,自动安装则需要机器能够访问外网。

另一种方式是直接在agent机器上预先安装好对应的工具,并将其可执行文件配置到系统PATH目录。 这种方式的优点是使用时可以直接使用antmvn命令。缺点就是需要预安装了,但也可以避免机器不能访问外网导致任务执行失败的问题。 预安装也使得agent的环境更可控。实践上agent都是需要安装一些工具的,并且做到了自动化安装。增加一个工具工作量差别并不大。

如果Jenkins使用环境是外网,并且Ant、Maven都使用默认配置(仓库地址等),可以使用第一种方式。其他情况建议使用第二种。

本文首发在微信公众号“DevOps持续交付”上,公众号ID:devopscd,欢迎关注。


 关注微信公众号

DevOps持续交付公众号ID:devopscd