1、Jenkins是什么
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson,主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。
Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。Jenkins可以很好的支持各种语言的项目构建,也完全兼容Maven、Ant、Gradle等多种第三方构建工具,同时跟SVN、GIT等常用的版本控制工具无缝集成,也支持直接对接GitHub等源代码托管网站。
2、Jenkins部署架构概述
- 一种是直接使用单Master安装Jenkins,直接进行任务管理和业务构建发布,但可能存在一定的生产安全风险。
- 一种是Master加Agent模式。Master节点主要是处理调度构建作业,把构建分发到Agent实际执行,监视Agent的状态。业务构建发布的工作交给Agent进行,即执行Master分配的任务,并返回任务的进度和结果。
Jenkins的Master和Agent均可安装在虚拟机或容器中,且组合形式可多样。
3、Jenkins部署架构详解
3.1 单节点架构(单Master)
单Master安装Jenkins,直接进行任务管理和业务构建发布。虚拟机单Master安装Jenkins可以参考《Centos7下安装配置最新版本Jenkins(2.452.3)》这篇博文。
对于某些特定场景,单节点不足以满足需求:
- 如果所有执行程序都忙于处理构建任务,则作业(Job)必须等待。
- 当项目的数量或负载增加时,很可能会耗尽资源。
为了恢复并运行Jenkins基础设施,需要通过增加内存、CPU等来增强服务器,而这不具备可扩展性,必须根据需求维护和升级服务器。
在维护升级过程中,构建环境将被关闭,作业不得不停止,整个Jenkins基础设施将不可用。
这种单节点架构会造成系统经常处于idel状态,分配给Jenkins环境的资源在这种状态下也没法被充分利用。
单节点架构还会引入安全问题,因为Jenkins用户对所有资源和工作空间都拥有完全的权限。
由于所有这些原因,Jenkins支持分布式架构,其中构建项目的工作负载被委托给多个Jenkins代理。
3.2 分布式架构(Master加Agent)
Master节点主要是处理调度构建作业,把构建分发到Agent实际执行,监视Agent的状态。业务构建发布的工作交给Agent进行,即执行Master分配的任务,并返回任务的进度和结果。
Jenkins的Master和Agent均可安装在虚拟机或容器中,您可根据自身需求选择其中一种方案执行:
- 固定Agent(一般是虚拟机):Agent一直运行,任务构建完成后不会销毁,创建完成后将一直占用集群资源,配置过程较简单。
- 动态Agent(一般是k8s):构建任务时动态创建Agent容器,并在任务构建完成后销毁容器,可实现资源动态分配,资源利用率高,但是配置过程较为复杂。
下面以动态Agent(k8s集群)Jenkins分布式结构图为例展示下Jenkins分布式架构。
主节点负责:
- 调度构建作业。
- 将构建作业分发给代理实际执行。
- 监视从节点(Slave),并根据需要停止其工作。
- 如果所有Jenkins代理都被占用,也可以直接执行作业。
Jenkins代理负责:
- 从主节点接收请求或工作,代理的工作就是按命令行事。
- 可以将工作配置为始终在特定代理上执行。
- 主节点将利用其资源来处理HTTP请求和管理构建环境,构建的实际执行将委托给代理。
通过这种配置,可以横向扩展Jenkins架构,其中Jenkins将安装在单个节点上。
主要参考:https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_0066.html