Jenkins 中的系统,主节点,节点,执行器等概念解释
1. 前言
本篇内容,介绍Jenkins中的系统System,主节点Master,节点Node,代理节点Agent和执行器Executor等概念。
更多的通过一些概念性的文字进行介绍,内容比较抽象。
2. 系统-System
我们在使用流水线时,不管是脚本式流水线还是声明式流水线,每一条Jenkins的流水线都是必须具备一个或多个System用于执行代码。
简单理解,这个系统是一个概念。所有的脚本和代码都是运行在系统中的。
3. 节点-Node
在Jenkins中节点是一个基本概念。所有可以执行Jenkins任务的系统都可以叫做节点。节点分为主节点和代理节点。
此外节点也可以是一个容器(例如:Docker)。
3.1 主节点-Master
Jenkins中的主节点就是一个Jenkins实例的主要控制系统。它能够完全访问所有的Jenkins配置选项和任务(Job)列表。如果我们没有指定其他System,那么默认的主节点Master就是默认的任务执行节点。
同时,不推荐在主节点master中执行比较高负载的任务,任何需要大量处理的任务都应该在主节点之外的系统中运行。
PS:简单理解就是,我们Android开发中的UI主线程和网络请求子线程,复制操作在子线程,主线程不做高负载运行。否则会卡死。
限制我们在主节点master中执行任务有两个核心:
- 主节点执行的任务具有访问所有数据和配置的权限,会有潜在的安全风险。
- 耗时的复杂的操作,会容易造成主节点阻塞,但主节点需要持续响应和管理各项操作过程。
当我们把握这两点,就知道哪些操作可以放在主节点中执行了。
3.2 代理节点-Agent
在老版本的Jenkins中代理节点叫做从节点(slave)。所有非主节点的系统都叫做代理节点。
这类节点是指有主系统管理,按需分配或指定执行特定的任务,例如:分配不同的代理节点针对不同的配置执行构建任务,或分配多个代理节点并发执行测试任务等等。
在脚本式流水线中,节点特指一个运行代理节点的系统,而在声明式流水线中,指代一个特定的代理节点来分配节点。
PS:节点概念如果没有弄明白,只需要知道:关键字node用于脚本式流水线,关键字agent用于声明式流水线。
4. 执行器-Executor
简单来说,执行器只是节点/代理节点用于执行任务的一个插槽。一个节点可以有任意多个执行器。执行器的数量定义了该节点可以执行的并发数量。
当一个主节点将任务分配给特定节点之后,这个节点必须有可以使用的执行器来立即执行该任务。否则任务会一直处于等待状态,直到有一个执行器可以用于执行为止。
同时,执行器的数量和其他参数可以在创建节点的时候进行配置。
5. 节点管理
在老版Jenkins中,任务可以在主节点实例或从节点实例上执行,而在Jenkins2的定义中。这些实例被统一成通用术语:节点。
节点的创建维护,可以通过Jenkins的系统管理进行配置,如下图所示:
在系统配置项中有一个:节点管理
我们可以通过这个节点管理进行:添加,删除,控制和监视系统运行任务的节点。
默认情况下只有一个master主节点
我们可以通过左侧的菜单面板实现节点添加和监控配置:
5.1 新建节点
当我们通过节点管理,进入节点列表界面时,可以使用左侧的新建节点菜单进行创建新的节点。
创建节点名称后,就可以点击 create创建按钮了。然后会出现配置界面。
描述和名称比较简单就省略了。
其中Number of executors 执行器数量,也就是这个节点下允许并发执行的数量。
基本配置完毕后,就可以创建一个节点对象了。
PS: 由于没有配置好访问SSH,所以我的节点获取不了系统信息,内容都显示为N/A
6. 小结
其实,如果理解还存在问题的话,jenkins是支持分布式构建的,我们每个节点其实就是一个虚拟机和运行环境。
整个jenkins是属于一个System对象,它可以链接多个节点,而jenkins系统安装所在的节点就是主节点默认叫做master。
我们可以将其他系统环境配置到主节点下,作为代理节点。每个代理节点在运行过程中耗费的都是其他主机系统资源。
每个节点下,我们可以创建多个item也就是任务。
而每次能够执行多少种任务,就是通过修改节点的并发数量也就是执行器来实现的。
我们每个创建的任务,不管是流水线还是自由软件。最后都是通过在某个节点下进行构建运行的。
当我们有多个节点时,我们可以选择任务的构建节点。
通过流水线创建的任务,我们可以在代码中使用抽象后的节点对象。进行定义当前流水线的任务在哪个节点中执行。
PS:小公司,小团队,小项目。我们其实使用一个master节点进行各种构建已经能够满足需求了。
只有那种大公司,上百个项目构建开发的。还是在一个master中进行构建,效率和性能就很容易受限
当我们了解了实际jenkins中的节点概念。才能比较顺畅的在流水线脚本中创建和使用节点关键字