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