1、Jenkins是什么

Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson,主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。

Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。Jenkins可以很好的支持各种语言的项目构建,也完全兼容Maven、Ant、Gradle等多种第三方构建工具,同时跟SVN、GIT等常用的版本控制工具无缝集成,也支持直接对接GitHub等源代码托管网站。

2、Jenkins部署架构概述

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基础设施将不可用。

这种单节点架构会造成系统经常处于idle状态,分配给Jenkins环境的资源在这种状态下也没法被充分利用。

单节点架构还会引入安全问题,因为Jenkins用户对所有资源和工作空间都拥有完全的权限。

由于这些原因,Jenkins支持分布式架构,其中构建项目的工作负载被委托给多个Jenkins代理。

3.2 分布式架构(Master加Agent)

Master节点主要是处理调度构建作业,把构建分发到Agent实际执行,监视Agent的状态。业务构建发布的工作交给Agent进行,即执行Master分配的任务,并返回任务的进度和结果。

Jenkins的Master和Agent均可安装在虚拟机或容器中,您可根据自身需求选择其中一种方案执行:

3.2.1 Agent类别

3.2.1.1 固定Agent

Agent一直运行,任务构建完成后不会销毁,创建完成后将一直占用集群资源,配置过程较简单。每个Agent可以存在多个Executor,具体的数量应该根据Agent所在主机的系统资源来设定。

  1. Linux Jenkins(常用);
  2. Windows Jenkins;
  3. 容器化方式。
注意 1:很多的构建步骤,有可能会通过运行shell命令进行,于是此时要确保在虚拟机或Container内部有可用的命令,比如流水线中需要执行mvn命令,需要在虚拟机或Container镜像内安装配置好maven工具。

3.2.1.2 动态Agent

构建任务时动态创建Agent容器,并在任务构建完成后销毁容器,可实现资源动态分配,资源利用率高,但是配置过程较为复杂。可以把每个Agent视作一个动态的Executor。

依赖的环境:
云,通过Jenkins Controller(即Jenkins主服务器)与云环境进行交互以管理这些动态Agent。Jenkins Controller通过API(依赖插件)与云提供商的服务进行通信,发送请求以创建新的资源(如虚拟机或容器)、配置这些资源以作为Jenkins Agent运行,以及在Job完成后销毁这些资源。这些API调用允许Jenkins Controller自动化整个流程,从资源的创建到销毁,从而实现了Agent的动态管理。

  1. Docker Plugin,基于配置的Docker Host,按需要创建容器运行Agent,需要事先配置好容器模板;
  2. Kubernetes Plugin(常用),基于配置的Kubernetes,按需要创建pod运行Agent,需要事先配置pod模板。
注意 1:Controller自身既可以部署在k8s上,也完全可以运行在k8s外。

下面以动态Agent(k8s集群)Jenkins分布式结构图为例展示下Jenkins分布式架构。

3.2.2 Jenkins分布式结构特点

主节点负责(也叫Controller节点):

  1. 调度构建作业。
  2. 将构建作业分发给代理实际执行。
  3. 监视从节点(Slave),并根据需要停止其工作。

Jenkins代理负责(也叫Slave节点):

  1. 从主节点接收请求或工作,代理的工作就是按命令行事。
  2. 可以将工作配置为始终在特定代理上执行。
  3. 主节点将利用其资源来处理HTTP请求和管理构建环境,构建的实际执行将委托给代理。

通过这种配置,可以横向扩展Jenkins架构,其中Jenkins将安装在单个节点上。

主要参考:
https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_0066.html

标签: none

添加新评论