- 问题36:Hudson和Jenkins是什么关系?
- 问题37:Jenkins的插件和共享库有什么异同点?什么时候用插件,什么时候用共享库?
- 问题38:Jenkins什么都能做吗?
- 问题39:slave、node、agent是什么关系,有区别吗?
- 问题40:Jenkins如何对接Ant、Maven等工具?
问题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
目录。
这种方式的优点是使用时可以直接使用ant
、mvn
命令。缺点就是需要预安装了,但也可以避免机器不能访问外网导致任务执行失败的问题。
预安装也使得agent
的环境更可控。实践上agent
都是需要安装一些工具的,并且做到了自动化安装。增加一个工具工作量差别并不大。
如果Jenkins使用环境是外网,并且Ant、Maven都使用默认配置(仓库地址等),可以使用第一种方式。其他情况建议使用第二种。
本文首发在微信公众号“DevOps持续交付”上,公众号ID:devopscd,欢迎关注。