APP下载

基于容器技术的持续集成系统研究与设计

2022-07-09毛小乐

电子技术与软件工程 2022年9期
关键词:执行器代码定义

毛小乐

(陕西工业职业技术学院 陕西省咸阳市 712000)

信息化产业在近几十年来一直呈现快速增长的趋势,随着软件产品的日趋复杂化,使得开发规模逐渐扩大,软件的开发、测试到产品上线的周期一直在延长。在传统的开发模式中,一个成熟的产品一定是经过若干版本的迭代,并且无论新增加的功能是否影响别的模块,都是将整个产品再次进行功能、性能等所有的测试,才能发布新的版本,且测试环节是在所有开发人员完成各自模块之后才能够进行。目前这种传统的集成方式已经不能满足当今企业的发展模式,随之敏捷开发的概念出现了,同时伴随着持续集成实践在业内的流行。持续集成的应用不仅可以降低软件开发的集成风险,还可以通过逐步改进开发过程来阶梯式地提高软件质量,因此对它的研究具有重要的价值和意义。

由于持续集成的思想对于改善软件开发过程,提高软件产品质量有着重要的意义,越来越多的开发团队已在他们的开发过程中采用持续集成,而且很多商业与开源的工具都支持持续集成,目前流行的CI 工具有CruiseControl、Jenkins、Travis CI、Circle CI、Codeship、CloudBuild等,通过分析这几种工具或系统发现持续集成系统的发展趋势是构建资源的虚拟化、代码化,即可以通过脚本灵活定义构建依赖的资源,在构建过程中动态的分配所需资源,提高资源复用的灵活性,减少资源配置的复杂度,从而实现基础设施即代码。

通过对上述持续化集成工具的分析,本文提出了一种基于容器技术的多语言异构环境的持续集成系统,旨在通过对大型软件的持续集成过程进行研究,设计出大型软件持续集成系统,能够实现构建环境的高效部署,构建资源具备分布式部署、异地容灾、动态调度、自愈能力。构建工程代码化、可回滚、可追溯。代码的静态检查,安全漏洞扫描和自动化测试与软件的编译构建高度集成,以及自动化部署到测试环境和生产环境。最终软件开发人员只需关注代码编写,代码提交后自动触发编译,版本集成,打包,静态检查,安全扫描,测试环境部署,自动化测试等,实现大型复杂软件的快速迭代,节省集成时间。

1 系统整体设计

基于容器技术的多语言异构环境的持续集成系统包含配置库、构建环境管理模块、构建工程管理模块、资源管理和调度模块、资源监控模块、数据库模块,如图1 所示。

图1: 持续集成系统架构图

系统配置库用来承担源码管理、构建环境的配置代码管理、构建工程配置代码管理等功能。构建环境管理模块负责自动分析构建环境的配置代码,并生效构建环境实例,提供编译构建任务执行环境。构建工程管理模块负责自动解析工程配置代码,解析各个编译任务、静态检查任务的依赖关系、串并行关系,分析构建所需环境类型,下发任务给构建资源管理模块准备构建资源,同时自动在构建系统上面创建对应Project。资源管理模块:负责构建基础设施的管理,统一管理底层的虚拟机、物理机、容器以对上层调用服务屏蔽细节,资源管理模块根据环境管理模块定义的构建环境属性,包括OS 类型、构建工具信息、静态检查工具信息以及其他配置信息,自动制作所需的构建镜像,并生成资源实例,然后构建工程根据资源标签调度构建资源,参与系统构建。

资源监控模块负责构建资源的指标监控,对异常资源及时发出告警通知,并进行自愈或者重启服务,智能分析资源负载,动态扩容。数据库模块负责构建元数据的存储,为后续的数据分析提供基础,以及为构建环境和构建工程恢复提供依据。

2 系统工作流程

2.1 系统构建环境

该多语言异构环境持续集成系统整体工作流程如图2所示。本DSLCI 系统的构建环境使用代码定义,实现基础设施即代码。构建环境管理模块主要包含Environment DSL Template、DSLEngine。

图2: 环境DSL 建模和调度工作流程

系统中基于DSL 环境代码化模型描述具备异构资源的代码化和动态调度、编排能力,可通过脚本灵活定义构建依赖的资源,在构建过程中动态的分配所需资源,提高资源复用的灵活性,减小资源配置的复杂度,从而实现基础设施即代码。构建资源具备分布式部署、异地容灾、动态调度、自愈能力。同时构建执行环境容器化,实现构建环境的高效部署。

使用Dockerfile 定义最小执行环境的配置并生成镜像,然后使用Environment DSL Template 定义异构资源的编排依赖和镜像的对应关系,然后在Project DSL Template 中定义不同Stage 的不同Task 构建任务的依赖执行器Label,最终在多级流水线中各个Task 自适应调度所需资源,自动扩容自动销毁。Environment DSL Template 负责对底层代码化定义的执行器进行编排,并通过DSLEngine实例化构建执行器,执行器主要包含Pipeline Master 和Slave Executor。Pipeline Master 负责整个任务的执行调度和执行器的动态调度,Master 也使用Dockerfile 定义,Master 对资源的硬件架构无特殊要求,因为其只负责调度,并不执行任何产品或者服务特性相关的编译构建。Slave Executor 是在构建阶段具体执行编译任务的实体环境,根据不同编译Task 的需求匹配不同OS 和Hardware Architecture,因此需要定义的Dockerfile扩展为Dockerfile-{OS}-{Hardware Architecture}。

2.2 系统构建工程

如图3 所示,通过代码化定义整个构建过程,保证构建过程自动化执行、构建过程可追溯可回滚,同时工程代码定义了软件架构层级的各个服务和模块依赖关系,为构建系统分布式执行构建任务提供了基本的能力。Project DSL Template 定义整体Pipeline 的各个Stage 的任务编排和执行过程。

图3: 代码化定义构建过程

图4: 软件模块实现

DSLEngine 根 据Project DSL Template 的 定 义,生 成目标构建系统的DSL 描述文件。Dependency Analysis 负责各个服务或者组件的DAG 精准依赖图分析,并联合MultilingualBuildEngine 生成目标系统的分布式调度配置文件,同时为目标系统提供多语言构建框架调用入口。MultiCache 负责多语言多级缓存能力提供,实现构建加速,提升整体系统运行效率。

2.3 软件模块

如4 所示,为持续集成系统软件模块实现图。

ContinuousIntegrationSystem 定义了系统基本框架(DSLEngine)和实现代码(Action),同时定义了一套可扩展接口标准(API Standard Protocol),为用户自定义扩展提供了统一的接入标准。

ProjDSLExpand 是用户自定义的工程代码和DSL 模型,且满足系统扩展接口,可无缝接入持续集成系统,扩展系统标准功能,从而满足不同用户的构建工程的定制化要求。

EnvDSLExpand 是用户自定义的环境代码和DSL 模型,且满足系统扩展接口,可无缝接入持续集成系统,扩展系统标准功能,从而满足不同用户的构建环境的定制化要求。

openAPI 提供了外部系统调用DSLCI 的标准接口,实现系统的对外开放能力。

2.3 资源动态调度和扩展算法

如图5 所示,通过代码化的描述,本系统可以自动实例化构建执行环境。Dockerfile 中定义了执行器的基础OS、构建工具的安装过程和软件包选择、辅助工具的安装过程和安装包选择、环境变量和参数配置。EnvDSLTemplate 中定义了不同场景的异构资源的代码化编排。DSLEngine 根据EnvDSLTemplate 的异构资源定义,自动路由选择所需的Dockerfile,然后评估物理资源的配额和当前资源利用率,资源配额不足或者利用率超过设定阈值,DSLEngine 自动触发动态扩容引擎,新的Node 自动挂载到构建资源池中,并自动化部署Docker 依赖,为后续的DSLEngine 调度做好准备。

图5: 资源动态调度和扩展算法

DSLEngine 评估资源充足时,自动拉取本地或者远端仓库Docker image,本地和远端均不存在image 时,DSLEngine 自动触发ImageBuildEngine 根据EnvDSLTemplate匹配的Dockerfile 构建Docker 镜像,并推送远端镜像仓库。Docker 镜像就绪后,DSLEngine 触发构建执行器实例批量生成。EnvEngine 负责整个构建系统环境的代码化定义、动态扩容、镜像管理、执行器实例化。

3 系统性能分析

该多语言异构环境持续集成系统通过DynamicScheduler在Pipeline 执行过程中的构建环境的动态匹配和调度,在Task 启动时分配资源,Task 结束时销毁资源,在保障构建任务顺利执行的前提下,实现了构建资源的动态使用和销毁,系统资源利用率提高。通过代码化、配置化的环境、工程管理,使得异常情况工程和环境恢复效率提升。

通过资源的动态调度和基于组件逻辑的分布式构建,软件系统构建过程的效率极大的提高。如图6 所示的复杂软件系统构建逻辑图,通过DynamicScheduler 优化调度前后的资源利用率对比如图7 所示,构建时长从2.58 小时缩短到1.08小时,效率提升了138.5%,资源利用率从7.69%提升到了17.94%,利用率提高了133.3%。

图6: 复杂软件系统构建逻辑

图7: 复杂软件系统构建性能分析

4 结束语

本文提出的基于容器技术的持续化集成系统能够应对未来软件开发的集成问题,实现编译构建环境代码化、自动化部署。融合虚拟机、物理机、容器等多种构建资源的能力,解决目前人为部署环境带来的效率低、易出错、不可重复、异常情况恢复时间长、系统可追溯能力差等缺点。同时该系统支持构建工程代码化,保证了构建工程的版本化管理;支持构建工程DSL 描述,保证了构建工程的版本化管理、可追溯、免人工配置;支持研发人员云端分布式构建,同时也支持本地快速构建能力,提高软件团队开发效率。

猜你喜欢

执行器代码定义
双级执行器系统的离散滑模控制
创世代码
创世代码
创世代码
创世代码
飞机装配预连接紧固件自动化安装末端执行器设计
考虑执行器饱和的改进无模型自适应控制
一类具有执行器饱和的非线性系统抗饱和方法研究
修辞学的重大定义
山的定义