【行云流水线】满足你对工作流编排的一切幻想~skr

京东云开发者
• 阅读 106

流水线模型

众所周知,DevOps流水线(DevOps pipeline)的本质是实现自动化工作流程,用于支持软件开发、测试和部署的连续集成、交付和部署(CI/CD)实践。它是DevOps方法论的核心组成部分,旨在加速软件交付、提高质量和实现持续改进。流水线的核心是流水线模型,是实现工作流编排,执行的重要基石,一个优秀的流水线模型可以覆盖用户更多的实践场景,按照用户的所思所想支持编排相应的工作流程,通过模型的分层设计,通用原子能力的生态建设,尽可能满足用户的任意场景的需求。

流水线模型基于将整个工作流程划分为一系列连续的阶段或任务,并通过将每个阶段的输出作为下一个阶段的输入,实现高效的生产或处理流程。每个阶段专注于特定的任务,并将其结果传递给下一个阶段,以便整个过程能够连续地进行。

优秀的流水线模型特征

1.清晰的模型分层结构,易理解的模型与业务场景的映射关系。优秀的流水线模型将整个工作流程明确地划分为一系列清晰的阶段或任务。每个阶段应具有明确的输入和输出,以确保流程的连贯性和可追溯性。

2.高度的可编排性,可以覆盖尽可能多的工作流编排场景,让业务场景图形化,实例化。能够灵活地添加、删除或调整阶段,调整阶段见的关联关系,依赖关系,以适应变化的要求。

3.支持扇入(Fan-in)/扇出(Fan-out)模式,扇入可以帮助减少数据流的冗余和复杂性,将多个阶段的输出合并成一个输入,从而提高资源利用效率和整体性能;扇出可以实现并行处理和任务分配,将一个阶段的输出分发给多个后续阶段进行处理,从而提高整个流水线的吞吐量和并发性。

4.多种执行条件组合模式,满足用户需求,可以支持根据阶段状态,手动执行,流程审批等等多条件均具备的前提下,进行后续阶段执行。


生活中的流水线😀

说起生活中的流水线大家可能想到的是车间,厂房中的流水线。这个也是经常被拿出来举例的场景。但我今天不举这个例子。大家可以思考下这两个场景有什么区别?

【行云流水线】满足你对工作流编排的一切幻想~skr

任天堂Switch有一款叫做“胡闹厨房”的游戏,俗称“分手厨房”,据说一玩就分手😜。这是一款以高难度合作著称的游戏,在形形色色的厨房中,你需要和你的同伴一起克服重重难关,按照指定的顺序生产出美味佳肴,满足客人的味蕾。在游戏过程中,制作一道菜需要完成许多的步骤,这就像我们在工作中使用的流水线,流水线有个总目标,也会拆分成几个阶段来完成分阶段的目标,作为下个阶段的输入。

这里我们以“制作Pizza”的流程为例,简单的把操作拆分为4个阶段:准备食材Prepare(如鸡肉,起司,青椒等),揉面Knead(面粉,油,发酵),制作(组合准备的食材与披萨底座),最终烘焙完成。在整个流程中,前后阶段是隐含着依赖关系,并驱动每一个阶段继续执行下去。

【行云流水线】满足你对工作流编排的一切幻想~skr

回想我们在实际工作中的流程,往往并不能通过简单的串联并联解决问题。都是有依赖关系的执行流程,场景可能比以上例子更复杂。

【行云流水线】满足你对工作流编排的一切幻想~skr


行云流水线模型升级👏

在众多流水线能力中,工作流的编排和执行能力是最核心的能力,也是用户实现自定义流程配置的基础和载体。行云流水线通过把流程中的不同阶段和任务串联在一起,实现提高阶段见的连接效率,通过阶段内部的垂直领域原子能力,实现阶段内各个原子或步骤的执行效率提升。

为了能更好的支撑用户的使用场景,云原生流水线升级了工作流模型。

从模型设计看:从原来的两层结构,升级为三层结构。增加阶段级(stage)概念,增加阶段级模型是为了解决与交付流程中各阶段(研发阶段,测试阶段,上线阶段)的对应关系。在研发阶段可以支持多需求的并行开发模式;在测试阶段支持对应测试环境的部署,自动化测试组合的复杂场景;在上线阶段,支持多应用的并行上线发布,有依赖关系的发布流程,支持常见发布策略(金丝雀/蓝绿)等。

从执行模式看

◦阶段级(stage):使用“DAG依赖声明方式”描述流程,这也是业界主流的灵活编排方式,适用于编排比较复杂的流程

◦原子级(atom):继续使用传统的“串/并行方式”,适用于简单,直接的流程

从编排模式看

◦图形化编排:阶段级的编排模式在业内并不多见,在交互设计和技术实现上都面临着挑战,行云流水线独创了一种新的图形化编排交互模式,提升用户操作体验

◦Yaml编排:Yaml的编排模式在业内比较常见,但编写时有一定门槛,对于熟练掌握的用户比较适合,也可以快速实现想要的流程

流水线模型与交付流程的映射

【行云流水线】满足你对工作流编排的一切幻想~skr

竞品分析

对比Harness,Azure,Github Actions等平台在不同pipeline维度的模型策略

| | 行云流水线 | Harness | Azure | Github | 云效 | | 执行模式-Stage级 | DAG✅ 默认parallel | serial/parallel | DAG✅ 默认serial | DAG✅ 默认parallel | serial | | 执行模式-Job/Atom级 | serial | serial/parallel | serial | serial | parallel | | 编排模式-图形化 | ✅ | ✅ | ❌ | ❌ | ✅ | | 编排模式-yaml | ✅ | ✅ | ✅ | ✅ | ❌ |

serial:只串行执行 parallel:只并行执行 serial/parallel:支持串并行组合方式,编排workflow DAG:依赖声明方式编排workflow 默认serial:无依赖声明的步骤,串行编排 默认parallel:无依赖声明的步骤,并行编排


平台用户的最佳实践👍

场景1:测试环境的按需更新与测试

测试环境一般不是独立存在的,可能也不是只更新某一个服务就可以满足测试条件的。在这种情况下,用户结合环境拓扑的概念,先基于拓扑创建一套环境,再更新所需的多个服务实例,以快速,自动化的方式实现测试环境的按需更新。通过准入流水线,创建测试环境(创建拓扑环境,更新拓扑节点等),并进行接口测试

【行云流水线】满足你对工作流编排的一切幻想~skr

下图为用户流水线编排界面

【行云流水线】满足你对工作流编排的一切幻想~skr

【行云流水线】满足你对工作流编排的一切幻想~skr

场景2:多维度的数据资源收集与分析

在数据分析的业务场景下,此流水线支持SRAS搜推算法服务,作为推送模型到线上的前置准备任务。用户需要收集多维度的数据源信息,通过扇入的方式聚合数据,并通过python脚本逻辑做数模型据汇总

•业务维度数据汇总:依赖于“业务数据收集”阶段➕“数据源数据收集”阶段的执行完成

•模型维度数据汇总:依赖于“数据源数据收集”阶段的执行完成

在执行每个阶段中用户在原子级别编排所需的具体执行步骤

【行云流水线】满足你对工作流编排的一切幻想~skr

【行云流水线】满足你对工作流编排的一切幻想~skr

【行云流水线】满足你对工作流编排的一切幻想~skr


云原生流水线编排功能介绍🤗

入口:流水线列表或流水线构建记录页,点击“配置流水线”

【行云流水线】满足你对工作流编排的一切幻想~skr

编排界面布局:下方为阶段编排,点击其中一个stage时,上方显示stage内的原子排列顺序

【行云流水线】满足你对工作流编排的一切幻想~skr

1)添加阶段

图形化的“阶段编排”快速搭建流程,在每个stage的前后分别会有一个“➕”号,此加号作用是建立前后依赖关系。当点击左侧加号时,添加前置依赖阶段;点击右侧加号时,添加依赖于当前阶段的后续阶段。在点击完成的同时,弹出stage模版(分阶段选择)添加创建。

【行云流水线】满足你对工作流编排的一切幻想~skr

点击右侧加号,选择开发阶段中的Java单元测试模版

【行云流水线】满足你对工作流编排的一切幻想~skr

快速添加后续执行阶段,并在上方显示原子编排顺序

【行云流水线】满足你对工作流编排的一切幻想~skr

查看单元测试阶段的依赖设置,前置依赖-“DMS表管理流程处理”

【行云流水线】满足你对工作流编排的一切幻想~skr

2)调整依赖阶段

当调整“单元测试阶段”到DMS数据共享阶段之后执行

【行云流水线】满足你对工作流编排的一切幻想~skr

【行云流水线】满足你对工作流编排的一切幻想~skr

3)删除阶段

stage右上角直接删除并确认

【行云流水线】满足你对工作流编排的一切幻想~skr

4)Yaml配置中的依赖关系

现阶段开放依赖关系的查看,可通过yaml方式导出创建具备DAG模式的流水线模型,后续将开放编排yaml功能

【行云流水线】满足你对工作流编排的一切幻想~skr


Q&A👻

Q:流水线模型的升级与级联流水线冲突吗?

A:不冲突,从能力上看,级联流水线只具备简单的扇出能力,不具备扇入能力,也不具备复杂流程的编排能力。级联流水线更多的是支持通过流水线A触发流水线B的触发模式。级联流水线在配置上,参数传递上都比较复杂,用户使用,大规模应用成本较高。我们希望随着云原生流水线模型的升级,未来逐步替代级联流水线,并支持用户更多场景。

以上介绍了云原生流水线模型升级的价值,解决的问题,用户实践,简单上手操作等。后续随着用户使用场景的增加,我们会持续介绍用户实践,技术探索等等。欢迎大家提出建议或吐槽。

作者:京东零售 顾铮

来源:京东云开发者社区 转载请注明来源

点赞
收藏
评论区
推荐文章
Tommy744 Tommy744
3年前
DevOps简介
DevOps是一个完整的面向IT运维的工作流,以IT自动化以及持续集成(CI)、持续部署(CD)为基础,来优化程式开发、测试、系统运维等所有环节。DevOps的概念DevOps一词的来自于Development和Operations的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。
Stella981 Stella981
2年前
GitLab+Rancher实践DevOps【转载】
摘要本文描述使用自建GitLab和Rancher实践持续集成/持续交付流水线的过程,并用Rancher实现容器编排和蓝绿发布。GitLab持续集成GitLab持续集成/持续交付流程图:!image(https://docs.gitlab.com/ee/ci/img/cicd_pipeline_infograp
Stella981 Stella981
2年前
DevOps简介
DevOps是一个完整的面向IT运维的工作流,以IT自动化以及持续集成(CI)、持续部署(CD)为基础,来优化程式开发、测试、系统运维等所有环节。DevOps的概念DevOps一词的来自于Development和Operations的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和
Stella981 Stella981
2年前
DevOps 初学者宝典
什么是DevOps随着软件发布迭代的频率越来越高,传统的「瀑布型」(开发—测试—发布)模式已经不能满足快速交付的需求。2009年左右DevOps应运而生,简单地来说,就是更好的优化开发(DEV)、测试(QA)、运维(OPS)的流程,开发运维一体化,通过高度自动化工具与流程来使得软件构建、测试、发布更加快捷、频繁和可靠。!DevOps
Stella981 Stella981
2年前
DevOps简单介绍
jenkins作为测试环境代码发布工具,sonar作为静态代码检查工具,idea作为开发工具,jira作为缺陷管理平台,upstream作为codereview工具(正在研究)。DevOps最近比较火热,但是核心貌似都是jenkinsDevOps是一个完整的面向IT运维的工作流,以IT自动化以及持续集成(CI)、持续部署(CD)为基础,来优化程式
Stella981 Stella981
2年前
DevOps中的测试实践
万物皆可pipeline,流程自动化解放生产力。在DevOps的pipeline中,我们发现测试环节也需要一套流水线化的能力,来保证研发流程的大批pipeline稳定高品质交付。!(https://oscimg.oschina.net/oscnet/up4bbab1418ad0e9f554552e07d5d5ae0b508.png)下面介绍下De
Stella981 Stella981
2年前
Jenkins入门
CI/CD介绍互联网软件的开发和发布,已经形成了一套标准流程,假如把开发工作流程分为以下几个阶段:编码→构建→集成→测试→交付→部署 !(https://oscimg.oschina.net/oscnet/ed05a8a9b9fbf651900f364128b901c16d5.png)正如你在上图中看到,持续集成(C
Stella981 Stella981
2年前
DevOps世界中的软件开发
!(https://oscimg.oschina.net/oscnet/f40e68cbfe8148deb00f040b4e917a0a.jpg)在整个软件开发过程中,开发人员通常需要花费大量时间来修复错误和漏洞,以便一切按计划进行交付。但是,通过DevOps实践,可以更轻松地管理和保护这些问题。这是由于以下事实:使用DevOps实践的软
亚马逊云科技的MLOps新实践,会给我们哪些启发?
20年前,软件行业在数字化演进的道路上,从部署一个Web服务器到部署几十甚至上百上千个不同的应用,在各种规模化交付方面的挑战之下,诞生了DevOps技术。比如虚拟化、云计算、持续集成/发布、自动化测试等,而MLOps就是机器学习时代的DevOps。它的主要作用就是连接模型构建团队和业务,运维团队,建立起一个标准化的模型开发,部署与运维流程,使得企业组织能更好
京东云开发者 京东云开发者
1个月前
京东流水线——满足你对工作流编排的一切幻想
01流水线模型在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了!众所周知,DevOps流水线(DevOpspipeline)的本质是实现自动化工作流程