京东流水线——满足你对工作流编排的一切幻想
Tech
01 流水线模型
在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了!
说起生活中的流水线大家可能想到的是车间,厂房中的流水线。这个也是经常被拿出来举例的场景。但我今天不举这个例子。大家可以思考下这两个场景有什么区别?
这里我们以“制作Pizza”的流程为例,简单的把操作拆分为4个阶段:准备食材Prepare(如鸡肉,起司,青椒等),揉面Knead(面粉,油,发酵),制作(组合准备的食材与披萨底座),最终烘焙完成。在整个流程中,前后阶段是隐含着依赖关系,并驱动每一个阶段继续执行下去。
回想我们在实际工作中的流程,往往并不能通过简单的串联并联解决问题。都是有依赖关系的执行流程,场景可能比以上例子更复杂。
从模型设计看:从原来的两层结构,升级为三层结构。增加阶段级(stage)概念,增加阶段级模型是为了解决与交付流程中各阶段(研发阶段,测试阶段,上线阶段)的对应关系。在研发阶段可以支持多需求的并行开发模式;在测试阶段支持对应测试环境的部署,自动化测试组合的复杂场景;在上线阶段,支持多应用的并行上线发布,有依赖关系的发布流程,支持常见发布策略(金丝雀/蓝绿)等。 从执行模式看: 阶段级(stage):使用“DAG依赖声明方式”描述流程,这也是业界主流的灵活编排方式,适用于编排比较复杂的流程 原子级(atom):继续使用传统的“串/并行方式”,适用于简单,直接的流程 从编排模式看: 图形化编排:阶段级的编排模式在业内并不多见,在交互设计和技术实现上都面临着挑战,行云流水线独创了一种新的图形化编排交互模式,提升用户操作体验 Yaml编排:Yaml的编排模式在业内比较常见,但编写时有一定门槛,对于熟练掌握的用户比较适合,也可以快速实现想要的流程
1.3.1 流水线模型与交付流程的映射
对比Harness,Azure,Github Actions等平台在不同pipeline维度的模型策略
serial:只串行执行
parallel:只并行执行
serial/parallel:支持串并行组合方式,编排workflow
DAG:依赖声明方式编排workflow
默认serial:无依赖声明的步骤,串行编排
默认parallel:无依赖声明的步骤,并行编排
02 平台用户的最佳实践
理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。
测试环境一般不是独立存在的,可能也不是只更新某一个服务就可以满足测试条件的。在这种情况下,用户结合环境拓扑的概念,先基于拓扑创建一套环境,再更新所需的多个服务实例,以快速,自动化的方式实现测试环境的按需更新。通过准入流水线,创建测试环境(创建拓扑环境,更新拓扑节点等),并进行接口测试
下图为用户流水线编排界面
业务维度数据汇总:依赖于“业务数据收集”阶段➕“数据源数据收集”阶段的执行完成 模型维度数据汇总:依赖于“数据源数据收集”阶段的执行完成
在执行每个阶段中用户在原子级别编排所需的具体执行步骤
03 云原生流水线编排功能
理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。
入口:流水线列表或流水线构建记录页,点击“配置流水线”
编排界面布局:下方为阶段编排,点击其中一个stage时,上方显示stage内的原子排列顺序
图形化的“阶段编排”快速搭建流程,在每个stage的前后分别会有一个“➕”号,此加号作用是建立前后依赖关系。当点击左侧加号时,添加前置依赖阶段;点击右侧加号时,添加依赖于当前阶段的后续阶段。在点击完成的同时,弹出stage模版(分阶段选择)添加创建。
点击右侧加号,选择开发阶段中的Java单元测试模版
快速添加后续执行阶段,并在上方显示原子编排顺序
查看单元测试阶段的依赖设置,前置依赖-“DMS表管理流程处理”
当调整“单元测试阶段”到DMS数据共享阶段之后执行
stage右上角直接删除并确认
现阶段开放依赖关系的查看,可通过yaml方式导出创建具备DAG模式的流水线模型,后续将开放编排yaml功能
04 Q&A
理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。
京东广告算法架构体系建设——高性能计算方案最佳实践|京东零售广告技术团队京东ES支持ZSTD压缩算法上线了:高性能,低成本大文件上传实践分享
求分享
求点赞
求在看