当前位置: 首页 > news >正文

资讯网站开发的背景中山企业网站建设方案

资讯网站开发的背景,中山企业网站建设方案,找人做网站 多少钱,wordpress 登录后台乱码源宝导读#xff1a;Jenkins作为一个开源的持续集成工具#xff0c;被大家广泛使用。本文将分享#xff0c;Jenkins在明源云研发协同平台中的运用#xff0c;以及在其作业设计方面的演进历程。一、作业设计1.0起初#xff0c;为了尽快推出研发协同平台v1.0#xff0c;我们… 源宝导读Jenkins作为一个开源的持续集成工具被大家广泛使用。本文将分享Jenkins在明源云研发协同平台中的运用以及在其作业设计方面的演进历程。一、作业设计1.0    起初为了尽快推出研发协同平台v1.0我们运用Jenkins工具快速实现了站点的部署、配套服务的安装、以及文件打包等功能。    使用过程包括以下简单的几个步骤1、定义Jenkins Job模板    参照Jenkins Job的config.xml结构定义出Job模板以及相关业务对应的子模板。2、替换业务参数    依据业务场景选择使用不同的子模板替换对应的业务参数与子模板生成最终的Jenkins Job配置文件。3、调用Jenkins API    通过直接调用Jenkins Api完成Job的创建与Build。4、轮询监控job状态    通过不停的轮询监控已出发build的job获取其当前执行状态得到最终执行结果。    刚开始为了快速实现业务需求采用最简单直接的方式引入了Jenkins并快速的完成了相关业务功能的实现。二、作业设计1.x    随着相关业务需求的不断递增起初的代码结构也慢慢显露出其弊端主要体现在子模板难以维护数量不断增加子模板的相似度也在不断增加参数变量追溯困难为应对各种不同场景使用了多种多样的业务参数变量Job状态不一致问题业务数据状态与job实际执行状态出现不一致接入新作业代码冗余每接入一个新的Job作业都需要定义过多的与Jenkins相关的内容。    为解决上述问题我们对Jenkins作业的设计进行了不断的改进改进主要分为2个方向。2.1、业务抽象    我们将不同的业务进行了划分站点部署、配套服务、打包等并且提取统一的Job构造器避免业务代码与功能代码相混淆。    除此之外还对Job的执行、状态监控、失败重试等功能性业务托管到Jenkins调度服务并通过消息通知实现了解耦。2.2、Jenkins SDK    为了更方便的操作Jenkins相关功能提取了针对Jenkins的SDK避免直接与Jenkins进行交互该SDK也是Jenkins调度服务的底层工具。    最终设计结构如下图所示三、作业设计2.0    在完成作业设计1.x的落地后已经能很好的支撑当时的持续集成业务但是在后续的业务发展中不足之处也逐渐显现Job作业的模板组装不够灵活当原有业务发生变化时不太容易灵活的调整。当有新产品类型的持续构建需求时需要重新定义新的模板和作业。Job和业务的耦合度较高。    从设计的角度来看主要是扩展性和配置的灵活性不足。    一次持续集成也就是一组Jenkins作业按照一定的顺序组成而一个作业里面实际上都是在执行一个一个的命令基于此, 我们设计了作业2.0的基础模型管道、作业、命令。    本次作业设计的演进充分利用了Jenkins的插件功能并且取代了之前的Jenkins调度服务    总体设计图如下管道一个持续集成管道由一系列持续集成作业组成; 不同功能的作业组合成不同功能的管道; 持续集成管道中的作业可以是串行也可以是并行作业: 管道中的作业由一组命令组成; 不同的命令组合成不同功能的作业命令命令是持续集成中的最小功能单元研发协同平台内置了一批命令集Jenkins执行器专门负责执行管道作业利用Jenkins SDK与Jenkins进行交互Job状态回调管道这里运用了Jenkins的Notification插件Jenkins Job执行过程中的状态会通过该插件即时回调3.1、类设计图服务ServiceDomainService服务调用的场景类负责统一调度执行服务。BaseService服务基类所有服务都继承与该类进行扩展。    若有新的服务只需通过继承BaseService进行扩展即可。/// summary /// 服务 /// /summary public abstract class BaseService : ITransientDependency {/// summary/// 服务类型/// /summarypublic virtual ServiceType ServiceType { get; set; } ServiceType.Other;/// summary/// 执行操作/// /summary/// param nameargs/param/// returns/returnspublic abstract Task Execute(BaseServiceArgs args);/// summary/// 执行器/// /summaryinternal ICiExecutor CiExecutor { get; }/// summary/// 构造函数/// /summary/// param nameciExecutor/parampublic BaseService(ICiExecutor ciExecutor){CiExecutor ciExecutor;} } 管道与作业BaseCiPipeline管道抽象类其中定义了管道作业的的构建动作。Job单个作业对象包含Jenkins Job 必须的属性。    若新服务需要构造新的执行管道需要通过BaseCiPipeline抽象类进行派生。/// summary /// CI流水线 /// /summary public abstract class BaseCiPipeline : ITransientDependency {/// summary/// 构建Jenkins Job 集合/// /summary/// param nameargsCI流水线参数/param/// returns/returnsinternal abstract TaskListJob StructureJobs(CiPipelineArgs args); } /// summary /// JenkinsJob定义 /// /summary public class Job {/// summary/// Job执行顺序编号/// /summarypublic int JobIndex { get; set; }/// summary/// 执行步骤/// /summarypublic ListCiAction ActionList { get; set; }/// summary/// Job参数/// /summarypublic Dictionarystring, string BuildParams { get; set; } new Dictionarystring, string();/// summary/// 执行节点/// /summarypublic string AssignedNode { get; set; }/// summary/// 工作空间/// /summarypublic string BaseJobName { get; set; }/// summary/// 当前JobName/// /summarypublic string JobName { get; set; }/// summary/// Job目录地址/// /summarypublic string JobPath { get; set; }/// summary/// 业务回调参数/// /summarypublic string Notes { get; set; } } 命令CiAction命令基类定义了命令的基本属性与动作。    每个新增的命令只需要实现自己的变化点即可。/// summary /// 操作 /// /summary public abstract class CiAction {/// summary/// 操作类型/// /summarypublic virtual ActionTypeEnum ActionType { get; set; } ActionTypeEnum.BatchFile;/// summary/// 操作说明/// /summaryinternal string _actionName { get; set; }/// summary/// 模板/// /summary/// returns/returnsinternal abstract string Template();/// summary/// 参数/// /summary/// returns/returnsinternal abstract Dictionarystring, string BuildParams();/// summary/// 生成Action内容/// /summary/// returns/returnspublic string Build(){var result this.Template();var pars this.BuildParams();if (pars ! null pars.Count 0){foreach (var item in pars){result result.Replace(item.Key, item.Value, StringComparison.OrdinalIgnoreCase);}}return result;} } 执行器ICiExecutor执行器接口该接口定义了执行器的动作以及对外扩展的回调事件。JenkinsExecutor是基于Jenkins 实现的执行器通过解析管道作业获得最终的Job并与Jenkins进行交互。    这里只实现了Jenkins的执行器若将来扩展了新的持续集成工具可以直接扩展新的执行器。/// summary /// 执行器 /// /summary public interface ICiExecutor {/// summary/// 开始构建/// /summaryevent EventHandlerCiPipelineArgs Started;/// summary/// 构建失败/// /summaryevent EventHandlerCiPipelineArgs Failed;/// summary/// 构建成功/// /summaryevent EventHandlerCiPipelineArgs Succeed;/// summary/// 执行流水线/// /summary/// param nameciPipeline流水线/param/// param nameargs参数对象/paramTask Execute(BaseCiPipeline ciPipeline, CiPipelineArgs args);/// summary/// 触发构建事件/// /summary/// param nameargs业务参数对象/param/// returns/returnsTask InvokeStarted(CiPipelineArgs args);/// summary/// 触发构建失败事件/// /summary/// param nameargs业务参数对象/param/// returns/returnsTask InvokeFailed(CiPipelineArgs args);/// summary/// 触发构建成功事件/// /summary/// param nameargs业务参数对象/param/// returns/returnsTask InvokeSucceed(CiPipelineArgs args); } 回调管道BaseServiceCallbackHandler回调处理基类所有的回调处理都应集成与该类。    每个回调处理可以通过定义 ServiceTypes去侦听自己所关心的回调事件并做相应的业务处理。/// summary /// 服务回调处理 /// /summary public abstract class BaseServiceCallbackHandler {/// summary/// 处理的服务类型/// /summarypublic virtual ServiceType[] ServiceTypes { get; set; }/// summary/// 执行器/// /summarypublic ICiExecutor CiExecutor { get; }public BaseServiceCallbackHandler(ICiExecutor ciExecutor){CiExecutor  ciExecutor; } } 作业运行流程执行流程客户端通过调用服务场景指定需要执行的具体服务服务定义了其对应的管道作业最终交由执行器进行执行。回调流程回调场景主要用于接收Jenkins的回调请求通过分析请求类型进而触发相应的处理事件。3.2、本次演进主要带来的好处包括1、可扩展性实现个性化功能只需自定义命令。对于不同的业务场景只需定义不同的持续集成管道。2、灵活性    通过原子性的命令定义可以自由组合出各种想要的作业进一步定义出各种功能的持续集成管道从而满足业务多样化的需求。3、解耦    通过抽象出Jenkins执行器来实现业务和Jenkins管道之间的解耦从而较小业务对Jenkins管道的影响。四、展望未来    目前的作业设计已经具备了一定的灵活性和扩展性在下阶段我们还会对作业设计做更进一步的优化通过封装标准的作业步骤Action、统一的CI流程进而提供可视化的流水线定制功能。由之前的代码业务驱动改为数据驱动最终实现作业的全面可定制与可配置。------ END ------作者简介朱同学 研发工程师目前负责RDC研发协同平台的设计与开发工作。也许您还想看研发协同平台持续交付之代理服务实践研发协同平台持续集成2.0架构演进研发协同平台持续集成实践招商城科走进武汉研发中心现场编码解锁平台内核技术
http://www.zqtcl.cn/news/106743/

相关文章:

  • 补习吧 一家专门做家教的网站百度云搜索引擎入口网盘搜索神器
  • 网站建设与制作企业嘉鱼网站建设哪家专业
  • 电脑怎么做网站赚钱柳州柳北建设局网站
  • 农村服务建设有限公司网站设计基础网站推荐
  • 做网站的编程语言组合ppt模板免费的网站推荐
  • 泰安企业建站公司流程上海营销型网站报价
  • 网站承载量怎么做福州公交集团网站建设
  • 新吴区住房和建设交通局网站小程序商城哪家好排行榜
  • 中小学网站建站模板长春火车站咨询电话
  • c2c网站特点公司网站建设亚运村
  • 邢台wap网站建设费用黑帽seo之搜索引擎
  • 如何用阿里云做网站刷题网站怎么做
  • 织梦制作手机网站上海猎头公司名单
  • 免费生成图片的网站wordpress 购物
  • 江西建设部网站国际新闻最新消息今天2023
  • 怎么做网站啊wordpress英文显示改中文
  • 建筑专业网站有哪些网站标题seo外包优化
  • 浙江建设厅网站施工员报名中国建设协会官网站
  • 网站建设优化是干嘛上海今天最新的新闻
  • 网站大全浏览器软文的概念
  • 盐山做网站价格莱芜征婚吧
  • 具有品牌的微网站建设网站设计培训班前台
  • 网站推广工具推荐html网站地图在线生成
  • 成都本地网站建设青岛电子商务的网站建设
  • 北京网站开发培训河南省百城建设提质工程网站
  • 郑州专业建网站南通网站建设技术支持
  • 简约网站程序网络营销方式较为单一
  • 绍兴企业自助建站123房产网
  • 科技类网站设计特点备案 网站首页地址
  • 做兼职网站网站建设培训速成