DevOps CI 实践及构想

走远了吗. 提交于 2020-02-07 07:55:54

前言

现分享CI(Continuous Integration)自动化实践中的一些经验与心得及相关远景构想,欢迎探讨。由于一些原因,隐藏了一些具体技术细节及实现方式,敬请谅解。

项目現状

项目产品由几十个应用组成,代码由不同的语言编制,同时也是跨OS平台。代码由Git托管,用相应的工具和程序打包和执行单元测试,Artitactory代管程序包,SonarQube实现代码检测及结果呈现,Jenkins整合CI流程及触发CD过程。

各个应用的Jenkins jobs 采用FreeStytle类型,在原有的基本模版上修改而成,随着应用功能的增减也就变得的多式多样了。

面临的问题

  • FreeStytle 类型不利于自动化的实施;
  • 各应用Job的分散管理导致结果的不一致性。例如同一stage的名字都可能不一样的名称;
  • 各应用的Jobs的特殊性,不利于集中管理。例如要增加一个通用过程的功能,必须告知各应用开发人员去更改相Job;
  • 非集中式管理的各应用Job延缓了新功能的实施,降低了反应速度。例如要实CD的集成,必须对各应用Job分开修改测试;
  • 新应用必须重新编制整个过程,上线速度太慢。

期望目标

  • 实现Job的配置更新的可追踪性,便于管理;
  • 保持CI过程的标准化和一致性,甚至包括名称的一致性;
  • 实现同类或相似Job更改的自动化,提升响应速度;
  • 降低Job与开发工作的相关性,减少对开发人员在Jenkins方便的技术要求;
  • 建立CI过程的自动化流程,搭建CI自服务平台,提升CI的工作效率;

实施过程

1. 用Scripted Pipeline替换FreeStytle Job

  • 将现有的Job从FreeStytle类型改为Scripted Pipeline,实现pipeline-as-code的目标,便于版本管理。
  • 尽量地将各stage和step模块化,相互之间用子Job或Share Library实现解藕和传递数据。

2. 用标准化的pipeline模型实现统一管理

建立标准模型的工作流程

期望达到的目标:

  • 当用户更改配置参数时,对应的应用pipeline立即发生相应变更,并自动更新产品包;
  • 当模板变更时,基于该模板的各个应用pipelines可以按要求同步更新,并可根据要求决定是否重新生成产品包;
  • 当应用代码更新时,CI过程即时触发更新产品包;

建立各类型Pipeline的标准化模型

期望达到的目标:

  • 为每个类型的Pipeline建立必须并灵活的标准化模型;
  • 为每个stage甚至step建立独立的pipeline,用参数调用的方式实现松耦合;
  • 在step或stage之间通过copy artifact plugin 实现参数传递;
  • 分析并解耦stage之间的逻辑关系,
    为其独立运行奠定基础;
  • 尽可能将stage并行运行,加快pipeline的运行速度;

基于标准化模型,建立各应用Pipeline,实现CI过程的自动化

期望达到的目标:

  • 用户只需按指定格式提供相应的参数变量,就可以自动建立相Pipeline;
  • 任何参数变量的变更都会建立或修改相应的Pipeline,并能触发CI过程;
  • 任何标准化模型的变更都可以自动或按要求触发相关应用的CI过程;

概念视图:
在这里插入图片描述

3. 整合Slave资源

期望达到的目标:

  • 统一配置管slave,基于标准模型统一调度和分配slave;
  • 随着CI过程的模块化和解藕过程的细化,逐步实现按过程(pipeline)的资源调度直至客器化调度;

远景展望

1. 集中展现CI完整流程

期望达到的目标:

  • 展现整个流程的运行状况,并提供各个阶段的接入点;
  • 提供各个阶段变更的整合信息,可追溯版本的关联性;
  • 提供不同视角的数据分析报告;

2. 建立CI的自服务平台

期望达到的目标(类 GitOps):

  • 用户只需按要求提交相关信息,就可以自动建立或更改CI过程;
  • CI过程可以跟据用户提交的变更信息自动触发,并生成新的产品包;

3. 无缝接入DevOps生命周期的全过程

期望达到的目标:

  • 不断丰富CI过程;
  • 向前与代码开发的pull request(commit)流程实现完全自动化整合;
  • 向后与CD流程实现完全自动化整合;

Reference:

GitHub: https://github.com/xiaojias

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!