本发明涉及计算机技术领域,具体地,涉及一种基于jenkins的任务构建方法及系统。
背景技术:
过去十年,云计算技术风起云涌,云的形态也在不断演进。随着云原生技术理念在行业内进一步的实践发展,云原生架构完成了it架构在云计算时代的进化升级。以ci/cd、devops、微服务架构为代表的云原生技术以其高效稳定、快速响应的特点驱动引领企业的业务发展,帮助企业构建更加适合用于云上的应用服务。在云端进行项目构建时,现阶段用的最多的构建调度工具是开源软件jenkins,jenkins用于自动化各种任务,包括构建、测试和软件部署。jenkins的稳定性不光决定了整个云平台的构建的平稳运行,还决定了整个平台的构建效率问题,因此jenkins的高可用性便成为云计算构建技术的重中之重。jenkins自身支持master/slave方案,该方案是在主节点(master)下挂载从节点(slave),主节点只进行任务的调度工作,构建任务则是在从节点上进行;相较于单纯的使用主节点去构建,解决了主节点服务内存和cpu资源占用过高导致主节点崩溃和构建效率过低的问题。但是,各应用版本部署作业通常只在特定时间点进行,例如一周一次或一月一次。而且在该特定时间内各应用版本部署作业的运行并发数可能非常高,当部署挂载的从节点数量较少时明显不能满足大并发数的性能要求,作业需要长时间在队列中等待;如果部署挂载大量从节点,在空闲时间会造成大量资源浪费,而且后期维护成本也很高。
技术实现要素:
本发明实施例的主要目的在于提供一种基于jenkins的任务构建方法及系统,以提高资源的利用率,降低维护成本。
为了实现上述目的,本发明实施例提供一种基于jenkins的任务构建方法,包括:
kubernets控制节点根据来自jenkins主节点的构建任务生成构建任务通知,发送构建任务通知至其中一个kubernetsnode节点;
kubernetsnode节点根据构建任务通知创建pod节点;
kubernets控制节点拉取构建任务对应的镜像至pod节点;
pod节点运行镜像,生成容器,并挂载容器;
kubernets控制节点发送构建任务至kubernetsnode节点;
kubernetsnode节点发送构建任务至pod节点;
pod节点发送构建任务至容器;
容器执行构建任务。
本发明实施例还提供一种基于jenkins的任务构建系统,包括:
kubernets控制节点,用于根据来自jenkins主节点的构建任务生成构建任务通知,发送构建任务通知至其中一个kubernetsnode节点;拉取构建任务对应的镜像至pod节点;发送构建任务至kubernetsnode节点;
kubernetsnode节点,用于根据构建任务通知创建pod节点;发送构建任务至pod节点;
pod节点,用于运行镜像,生成容器,并挂载容器;发送构建任务至容器;
容器,用于执行构建任务。
本发明实施例的基于jenkins的任务构建方法及系统中的kubernetsnode节点创建pod节点,kubernets控制节点拉取构建任务对应的镜像至pod节点,令pod节点运行镜像,生成并挂载容器;kubernets控制节点还通过kubernetsnode节点和pod节点将构建任务至容器,容器执行构建任务,以提高资源的利用率,降低维护成本。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例中基于jenkins的任务构建方法的流程图;
图2是本发明实施例中kubernets集群的整体架构图;
图3是本发明实施例中kubernetsnode节点的整体架构图;
图4是本发明实施例中pod节点的整体架构图;
图5是本发明另一实施例中基于jenkins的任务构建方法的流程图;
图6是本发明实施例中基于jenkins的任务构建系统的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本领域技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
鉴于现有技术存在资源浪费,维护成本高等问题,本发明实施例提供一种基于jenkins的任务构建方法,以提高资源的利用率,降低维护成本。以下结合附图对本发明进行详细说明。
图1是本发明一实施例中基于jenkins的任务构建方法的流程图。如图1所示,基于jenkins的任务构建方法包括:
s101:kubernets控制节点根据来自jenkins主节点的构建任务生成构建任务通知,发送构建任务通知至其中一个kubernetsnode节点。
其中,jenkins主节点通过kubernets插件将构建任务发送至kubernets控制节点。
一实施例中,s101包括:kubernets控制节点查询每个kubernetsnode节点的资源状态,并根据每个kubernetsnode节点的资源状态确定空闲的kubernetsnode节点;kubernets控制节点发送构建任务通知至其中一个空闲的kubernetsnode节点。
其中,kubernets控制节点可以根据kubernets集群的运行情况动态增加或删除kubernetsnode节点的数量。kubernetsnode节点会定时向kubernets控制节点汇报该节点的资源使用情况,kubernets控制节点会根据情况进行资源的调控。
s102:kubernetsnode节点根据构建任务通知创建pod节点。
其中,pod被创建成功后,可以使用以下命令查看所有pod的启动和运行状态:
kubectlgetpods。
s103:kubernets控制节点拉取构建任务对应的镜像至pod节点。
s104:pod节点运行镜像,生成容器,并挂载容器。
s105:kubernets控制节点发送构建任务至kubernetsnode节点。
s106:kubernetsnode节点发送构建任务至pod节点。
s107:pod节点发送构建任务至容器。
s108:容器执行构建任务。
一实施例中,jenkins主节点通过kubernets插件使用kubectl命令启动容器的命令如下:
kubectlrunjenkins-slave--image=jenkins-image--replicas=2--port=80;
这条命令是用kubectl命令同时创建了两个运行实例的jenkins-imagepod来保证始终有两个pod在运行,从而实现高可用。
图1所示的基于jenkins的任务构建方法的执行主体可以为基于jenkins的任务构建系统。由图1所示的流程可知,本发明实施例的基于jenkins的任务构建方法中的kubernetsnode节点创建pod节点,kubernets控制节点拉取构建任务对应的镜像至pod节点,令pod节点运行镜像,生成并挂载容器;kubernets控制节点还通过kubernetsnode节点和pod节点将构建任务至容器,容器执行构建任务,以提高资源的利用率,降低维护成本。
其中,kubernets控制节点和kubernetsnode节点属于kubernets集群。kubernetsnode节点为工作负载节点,根据系统需求可以部署多个,支持动态增加和删除。
图2是本发明实施例中kubernets集群的整体架构图。如图2所示,在kubernets控制节点中有四个关键进程:kube-controller-manager、kube-apiserver、kube-scheduler和etcd。其中kube-apiserver与kube-controller-manager及kube-scheduler间存在交互。用户通过kubectl命令可以与kube-apiserver进行交互,这也是kubernets集群的唯一入口。
lvs是linuxvirtualserver的简写,即linux虚拟服务器。controllermanager是kubernets里所有资源对象的自动化控制中心,可以理解为资源对象的“总管”。apiserver提供了httprest接口的关键服务进程,是kubernets里所有资源增、删、改、查等操作的唯一入口,也是进群控制的入口进程;scheduler负责资源调度(pod节点调度)进程,相当于公交公司的“调度室”;kubernets里的所有资源对象的数据都保存在etcd中。
图3是本发明实施例中kubernetsnode节点的整体架构图。如图3所示,kubernetsnode节点可以在运行期间动态增加到kubernets集群中,前提是这个节点上已经正确安装、配置和启动了上述关键进程。在默认情况下,kubelet会向kubernets控制节点注册自己,这也是kubernets推荐的node节点管理方式。一旦kubernetsnode被纳入集群管理范围,kubelet进程就会定时向kubernets控制节点汇报自己的情况,例如操作系统、docker版本、机器的cpu和内存情况,以及当前有哪些pod节点在运行等,这样kubernets控制节点可以获知每个node节点的资源使用情况,并实现高效均衡的资源调度策略。
imageregistry是镜像仓库,对镜像进行统一的管理和存储的地方。optionaladd-ons:dns,ui,etc指的是为运行的容器配置dns、ui、etc等插件。supervisord是一个轻量级的监控系统,用于保障kubelet和docker运行。kube-proxy是通过在主机上维护网络规则并执行转发来实现kubernets服务抽象。fluented是一个守护进程,可提供cluster-levellogging。
图4是本发明实施例中pod节点的整体架构图。如图4所示,pod节点是kubernets的基本构件,是在kubernets中能够创建或部署的最小对象。一个pod节点代表集群中一个正在运行的进程,相当于一个共享context的配置组,在同一个context下,应用可还会有独立的cgroup隔离机制,一个pod节点是一个容器环境下的“逻辑主机”,它可能包含一个或多个紧密相连的应用,这些应用可能是在同一个物理主机或虚拟机上。
pod节点将一个应用程序容器(在某些情况下是多个容器,要在pod节点的yaml文件中做定义)、存储资源、唯一的网络ip以及控制容器应该如何运行的配置封装在一起。一个pod代表一个部署单元:即kubernets中单个应用程序实例,可能包含单个容器或少量紧密耦合且共享资源的容器。jenkins从节点的容器便是运行在pod中,当有任务时可以运行一个容器到pod中,构建任务结束时可以通过容器回收机制将运行的容器进行停止,从而实现资源的回收。contentmanager是指一个数据管理器。consumer是指运行的客户端。webserver是指web服务。volume是指容器挂载的卷。filepuller是指文件获取的操作。
图5是本发明另一实施例中基于jenkins的任务构建方法的流程图。如图5所示,在执行s101之前,基于jenkins的任务构建方法还包括:
s201:服务器搭建jenkins主节点、kubernets控制节点和多个kubernetsnode节点。
其中,可以搭建两个jenkins主节点,两个jenkins主节点通过keepalived进行检活灾备的操作。
s202:服务器搭建jenkins从节点,并对jenkins从节点进行容器化操作,生成镜像。
其中,镜像中包括构建任务的相关插件的组件,如:maven、jdk和sonarscanner等。构建镜像的基础镜像可以是linux内核的基础镜像,如centos和ubuntu等操作系统。
s203:服务器将镜像存储至镜像库。
其中,镜像库可以为harbor镜像库。
此时s103包括:kubernets控制节点从镜像库中拉取构建任务对应的镜像至pod节点。
一实施例中,基于jenkins的任务构建方法还包括:pod节点获取容器的容器id,将容器id发送至kubernetsnode节点;kubernetsnode节点将容器id发送至kubernets控制节点。
此时s105包括:kubernets控制节点根据容器id发送构建任务至kubernetsnode节点。当有多个构建任务时,kubernets启动多个容器,可以通过不同的容器id来进行区分。
一实施例中,当构建任务结束时,容器通过pod节点和kubernetsnode节点,将包括容器id的任务结束通知发送至kubernets控制节点。kubernets控制节点在收到任务结束通知后,根据容器id回收对应的容器。
一实施例中,可以使用以下命令将容器进行停止,同时也将占用的资源进行回收:
kubectlstoprcjenkins-slave。
一实施例中,当容器宕机时,容器通过pod节点和kubernetsnode节点,将包括容器id的宕机通知发送至kubernets控制节点。kubernets控制节点在收到宕机通知后,根据容器id重启对应的容器。
本发明实施例的具体流程如下:
1、服务器搭建jenkins主节点、kubernets控制节点和多个kubernetsnode节点。
2、服务器搭建jenkins从节点,并对jenkins从节点进行容器化操作,生成镜像。
3、服务器将镜像存储至harbor镜像库。
4、jenkins主节点通过kubernets插件将构建任务发送至kubernets控制节点。
5、kubernets控制节点根据构建任务生成构建任务通知。
6、kubernets控制节点查询每个kubernetsnode节点的资源状态,并根据每个kubernetsnode节点的资源状态确定空闲的kubernetsnode节点。
7、kubernets控制节点发送构建任务通知至其中一个空闲的kubernetsnode节点。
8、kubernetsnode节点根据构建任务通知创建pod节点。
9、kubernets控制节点从harbor镜像库中拉取构建任务对应的镜像至pod节点。
10、pod节点运行镜像,生成容器,并挂载容器。
11、pod节点获取容器的容器id,将容器id发送至kubernetsnode节点;kubernetsnode节点将容器id发送至kubernets控制节点。
12、kubernets控制节点根据容器id发送构建任务至kubernetsnode节点,kubernetsnode节点发送构建任务至pod节点,pod节点发送构建任务至容器。
13、容器执行构建任务。
综上,本发明实施例的基于jenkins的任务构建方法中的kubernetsnode节点创建pod节点,kubernets控制节点拉取构建任务对应的镜像至pod节点,令pod节点运行镜像,生成并挂载容器;kubernets控制节点还通过kubernetsnode节点和pod节点将构建任务至容器,容器执行构建任务,以提高资源的利用率,降低维护成本。
综上所述,本发明实施例提供的基于jenkins的任务构建方法具有以下有益效果:
(1)通过结合kubernetes可以实现对jenkins从节点的动态创建、停止以及资源的回收利用,降低了对jenkins从节点的维护成本,并且提高了对构建资源的利用率;
(2)现有技术主要采用的是虚拟机或物理机模式的主从方案,jenkins主节点和jenkins从节点全部部署在虚拟机或物理机上,当jenkins的高可用性资源不足时,需要不断增加jenkins从节点来提升运行效率,这就会导致jenkins从节点的数量越来越多,维护的成本也会越来越高。而本发明实施例中的jenkins主节点只有在构建任务出现时才会调用kubernetes去创建一个容器执行构建任务;当构建任务结束时,可以将容器进行回收,这样对于jenkins从节点的维护全部交由kubernetes进行管理,大大降低了维护成本;
(3)现有技术采用将jenkins主节点和jenkins从节点全部部署在虚拟机或物理机的模式,当构建任务数量大于jenkins从节点的数量时,将会出现任务堵塞,从而导致构建效率降低,只能通过增加虚拟机或物理机数量来解决效率降低的问题。而本发明实施例只需要增加kubernetes的pod节点数量,在每一个pod节点里面运行容器即可。并且每一个pod节点里面理论上最多可以运行130个容器,相较于现有技术在每一台物理机或虚拟机上运行一个构建任务的方式,资源利用率得到了显著的提升;
(4)现有技术在jenkins从节点出现宕机时无法执行构建任务,此时需要运维人员手动启动jenkins从节点以再次进行构建。而本发明实施例采用kubernetes管理jenkins从节点的方式,当容器出现宕机的情况时,kubernetes会自动对容器进行重启,再次执行构建任务,释放人工,大大降低运维成本。
基于同一发明构思,本发明实施例还提供了一种基于jenkins的任务构建系统,由于该系统解决问题的原理与基于jenkins的任务构建方法相似,因此该系统的实施可以参见方法的实施,重复之处不再赘述。
图6是本发明实施例中基于jenkins的任务构建系统的结构框图。如图6所示,基于jenkins的任务构建系统包括:
kubernets控制节点,用于根据来自jenkins主节点的构建任务生成构建任务通知,发送构建任务通知至其中一个kubernetsnode节点;拉取构建任务对应的镜像至pod节点;发送构建任务至kubernetsnode节点;
kubernetsnode节点,用于根据构建任务通知创建pod节点;发送构建任务至pod节点;
pod节点,用于运行镜像,生成容器,并挂载容器;发送构建任务至容器;
容器,用于执行构建任务。
在其中一种实施例中,还包括:
服务器,用于搭建jenkins主节点、kubernets控制节点和多个kubernetsnode节点;搭建jenkins从节点,并对jenkins从节点进行容器化操作,生成镜像;将镜像存储至镜像库;
kubernets控制节点具体用于:从镜像库中拉取构建任务对应的镜像至pod节点。
在其中一种实施例中,kubernets控制节点具体用于:查询每个kubernetsnode节点的资源状态,并根据每个kubernetsnode节点的资源状态确定空闲的kubernetsnode节点;发送构建任务通知至其中一个空闲的kubernetsnode节点。
在其中一种实施例中,pod节点还用于:获取容器的容器id,将容器id发送至kubernetsnode节点;
kubernetsnode节点还用于:将容器id发送至kubernets控制节点;
kubernets控制节点具体用于:根据容器id发送构建任务至kubernetsnode节点。
在其中一种实施例中,jenkins主节点用于:通过kubernets插件将构建任务发送至kubernets控制节点。
综上,本发明实施例的基于jenkins的任务构建系统中的kubernetsnode节点创建pod节点,kubernets控制节点拉取构建任务对应的镜像至pod节点,令pod节点运行镜像,生成并挂载容器;kubernets控制节点还通过kubernetsnode节点和pod节点将构建任务至容器,容器执行构建任务,以提高资源的利用率,降低维护成本。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
本领域技术人员还可以了解到本发明实施例列出的各种说明性逻辑块(illustrativelogicalblock),单元,和步骤可以通过电子硬件、电脑软件,或两者的结合进行实现。为清楚展示硬件和软件的可替换性(interchangeability),上述的各种说明性部件(illustrativecomponents),单元和步骤已经通用地描述了它们的功能。这样的功能是通过硬件还是软件来实现取决于特定的应用和整个系统的设计要求。本领域技术人员可以对于每种特定的应用,可以使用各种方法实现所述的功能,但这种实现不应被理解为超出本发明实施例保护的范围。
本发明实施例中所描述的各种说明性的逻辑块,或单元,或装置都可以通过通用处理器,数字信号处理器,专用集成电路(asic),现场可编程门阵列或其它可编程逻辑装置,离散门或晶体管逻辑,离散硬件部件,或上述任何组合的设计来实现或操作所描述的功能。通用处理器可以为微处理器,可选地,该通用处理器也可以为任何传统的处理器、控制器、微控制器或状态机。处理器也可以通过计算装置的组合来实现,例如数字信号处理器和微处理器,多个微处理器,一个或多个微处理器联合一个数字信号处理器核,或任何其它类似的配置来实现。
本发明实施例中所描述的方法或算法的步骤可以直接嵌入硬件、处理器执行的软件模块、或者这两者的结合。软件模块可以存储于ram存储器、闪存、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、可移动磁盘、cd-rom或本领域中其它任意形式的存储媒介中。示例性地,存储媒介可以与处理器连接,以使得处理器可以从存储媒介中读取信息,并可以向存储媒介存写信息。可选地,存储媒介还可以集成到处理器中。处理器和存储媒介可以设置于asic中,asic可以设置于用户终端中。可选地,处理器和存储媒介也可以设置于用户终端中的不同的部件中。
在一个或多个示例性的设计中,本发明实施例所描述的上述功能可以在硬件、软件、固件或这三者的任意组合来实现。如果在软件中实现,这些功能可以存储与电脑可读的媒介上,或以一个或多个指令或代码形式传输于电脑可读的媒介上。电脑可读媒介包括电脑存储媒介和便于使得让电脑程序从一个地方转移到其它地方的通信媒介。存储媒介可以是任何通用或特殊电脑可以接入访问的可用媒体。例如,这样的电脑可读媒体可以包括但不限于ram、rom、eeprom、cd-rom或其它光盘存储、磁盘存储或其它磁性存储装置,或其它任何可以用于承载或存储以指令或数据结构和其它可被通用或特殊电脑、或通用或特殊处理器读取形式的程序代码的媒介。此外,任何连接都可以被适当地定义为电脑可读媒介,例如,如果软件是从一个网站站点、服务器或其它远程资源通过一个同轴电缆、光纤电缆、双绞线、数字用户线(dsl)或以例如红外、无线和微波等无线方式传输的也被包含在所定义的电脑可读媒介中。所述的碟片(disk)和磁盘(disc)包括压缩磁盘、镭射盘、光盘、dvd、软盘和蓝光光盘,磁盘通常以磁性复制数据,而碟片通常以激光进行光学复制数据。上述的组合也可以包含在电脑可读媒介中。
1.一种基于jenkins的任务构建方法,其特征在于,包括:
kubernets控制节点根据来自jenkins主节点的构建任务生成构建任务通知,发送所述构建任务通知至其中一个kubernetsnode节点;
所述kubernetsnode节点根据所述构建任务通知创建pod节点;
所述kubernets控制节点拉取所述构建任务对应的镜像至所述pod节点;
所述pod节点运行所述镜像,生成容器,并挂载所述容器;
所述kubernets控制节点发送所述构建任务至所述kubernetsnode节点;
所述kubernetsnode节点发送所述构建任务至所述pod节点;
所述pod节点发送所述构建任务至所述容器;
所述容器执行所述构建任务。
2.根据权利要求1所述的基于jenkins的任务构建方法,其特征在于,还包括:
服务器搭建jenkins主节点、kubernets控制节点和多个kubernetsnode节点;
所述服务器搭建jenkins从节点,并对所述jenkins从节点进行容器化操作,生成镜像;
所述服务器将所述镜像存储至镜像库;
所述kubernets控制节点拉取所述构建任务对应的镜像至所述pod节点包括:
所述kubernets控制节点从所述镜像库中拉取所述构建任务对应的镜像至所述pod节点。
3.根据权利要求1所述的基于jenkins的任务构建方法,其特征在于,所述kubernets控制节点发送所述构建任务通知至其中一个kubernetsnode节点包括:
所述kubernets控制节点查询每个kubernetsnode节点的资源状态,并根据每个kubernetsnode节点的资源状态确定空闲的kubernetsnode节点;
所述kubernets控制节点发送所述构建任务通知至其中一个空闲的kubernetsnode节点。
4.根据权利要求1所述的基于jenkins的任务构建方法,其特征在于,还包括:
所述pod节点获取所述容器的容器id,将所述容器id发送至所述kubernetsnode节点;
所述kubernetsnode节点将所述容器id发送至所述kubernets控制节点;
所述kubernets控制节点发送所述构建任务至所述kubernetsnode节点包括:
所述kubernets控制节点根据所述容器id发送所述构建任务至所述kubernetsnode节点。
5.根据权利要求1所述的基于jenkins的任务构建方法,其特征在于,还包括:
所述jenkins主节点通过kubernets插件将所述构建任务发送至所述kubernets控制节点。
6.一种基于jenkins的任务构建系统,其特征在于,包括:
kubernets控制节点,用于根据来自jenkins主节点的构建任务生成构建任务通知,发送所述构建任务通知至其中一个kubernetsnode节点;拉取所述构建任务对应的镜像至pod节点;发送所述构建任务至kubernetsnode节点;
kubernetsnode节点,用于根据所述构建任务通知创建pod节点;发送所述构建任务至所述pod节点;
pod节点,用于运行所述镜像,生成容器,并挂载所述容器;发送所述构建任务至所述容器;
容器,用于执行所述构建任务。
7.根据权利要求6所述的基于jenkins的任务构建系统,其特征在于,还包括:
服务器,用于搭建jenkins主节点、kubernets控制节点和多个kubernetsnode节点;搭建jenkins从节点,并对所述jenkins从节点进行容器化操作,生成镜像;将所述镜像存储至镜像库;
所述kubernets控制节点具体用于:从所述镜像库中拉取所述构建任务对应的镜像至所述pod节点。
8.根据权利要求6所述的基于jenkins的任务构建系统,其特征在于,所述kubernets控制节点具体用于:查询每个kubernetsnode节点的资源状态,并根据每个kubernetsnode节点的资源状态确定空闲的kubernetsnode节点;发送所述构建任务通知至其中一个空闲的kubernetsnode节点。
9.根据权利要求6所述的基于jenkins的任务构建系统,其特征在于:
所述pod节点还用于:获取所述容器的容器id,将所述容器id发送至所述kubernetsnode节点;
所述kubernetsnode节点还用于:将所述容器id发送至所述kubernets控制节点;
所述kubernets控制节点具体用于:根据所述容器id发送所述构建任务至所述kubernetsnode节点。
10.根据权利要求6所述的基于jenkins的任务构建系统,其特征在于:
所述jenkins主节点用于:通过kubernets插件将所述构建任务发送至所述kubernets控制节点。
技术总结