备案 控制台
开发者社区 开发与运维 文章 正文

DevOps之流水线

简介: 一站式部署流水线

什么是部署流水线?

软件开发过程是一个将客户或用户的想法变成一个真实可用的特性的过程。部署流水线是这个过程中的一部分,是指软件从版本控制库到用户手中这一过程自动化的展现形式。这一过程包括编译构建、代码检查、上传制品库、测试和部署等,并且这些阶段的执行都应该是自动执行的。自动化带来的好处是这个流程变得更快、可重复且更加可靠。


部署流水线主要包含下面几个阶段:

  • 提交阶段,代码提交后会运行代码编译、自动化单元测试以及对代码进行动静态扫描;
  • 自动化测试阶段,主要是从功能性和非功能性方面验证系统是否可用,并且满足用户需求;
  • 手工测试阶段,主要是用户验收测试,用于验证系统是否为用户提供了价值;
  • 发布阶段,将软件交付给用户,交付方式有多种,可以是独立部署的方式,也可以是 SaaS 服务的方式。


部署流水线包含的很多阶段我们之前的课程都有提到,比如提交检查、自动化测试等,和部署相关的内容涉及较少,这部分内容是本课时的一个重点。


部署流水线相关实践

为了更好地发挥部署流水线的作用,在实施部署流水线的时候要遵循以下几个准则:


一包到底

一包到底是之前课时的内容,就是将软件从源代码编译构建出一个部署包,在后续的流程中都统一使用这一个部署包。这样做的好处有以下两点。


  • 减少了编译时间:每次编译都需要花费时间,并且占用编译机的资源,如果代码库比较大重复编译将是一场灾难。
  • 保证部署包的一致性:因为在各个阶级进行测试的部署包都是同一个,这样可以保证部署到生产环境中的部署包与前面测试阶段验证过的部署包是完全一样的。


那么如何保证每次部署的包都是同一个呢?在之前的流水线中,每次生成部署包的同时也会生成一个 md5 值,并在后续每次部署时利用这个 md5 值对部署包进行验证。这也是大多数企业中部署时采用的一种方法。


另外,对于每次构建出的部署包都需要存放到专门的制品库中,如 Jfrog Artifactory。这一步骤可以集成到持续集成流水线中,上传制品库时同时也会携带该部署包的属性,如:代码库、版本号、CommitId。Jfrog Artifactory 支持对制品打标签,可以在后续的测试阶段将测试结果以标签的形式打到制品上,作为是否进阶到下一个阶段的判断条件。

相同的部署方式

使用相同的流水线、相同的部署方式部署任意一套环境,包括生产环境! 这样既能对构建和部署流程进行有效测试,提高部署流水线的稳定性和健壮性。又能保证不同环境的部署过程是一致的。当部署的服务出现问题时,可以排除部署脚本导致的因素。


实际情况中,每套环境有很多不同之处,比如机器的 IP 会不同,操作系统和中间件的配置不同等。不同的环境信息并不意味着就要为每套环境都准备一套部署脚本,我们可以采用将部署脚本与配置信息分离的方法。在之前的“环境管理”课时中提到,将部署脚本作为模板存储在 Git 代码库中,将每个环境不同的配置信息存储在 CMDB 中,就能实现通过一套部署脚本部署所有环境。


采用相同的部署方式是降低发布风险的方法之一。因为不管是测试环境、还是生产环境都是相同的部署方式,在向生产环境部署之前,已经在测试环境部署了 n 次了,部署脚本已经非常健壮,能够大大降低向生产环境部署的风险。


对部署冒烟测试

在应用程序部署完成后,应该有相应的脚本对应用程序进行冒烟测试,以确保应用程序启动并运行了。这个测试可以很简单,比如调用接口检查是否能正常返回。如果要检查依赖的服务,比如数据库和缓存服务等,可以调用从依赖服务获取数据的接口,结果可以是空,只要能确保连接是正常的即可。


冒烟测试又称为部署测试,它是环境部署完成并交付使用的有效验证方法。如果服务不可用,也能知道是什么原因导致的不可用:是服务本身还是依赖服务?这对排除应用程序无法正常运行问题也很有帮助。


如何实现部署流水线

下面介绍一下如何实现部署流水线。下图是部署流水线的结构图,该图也反映了真实的软件交付过程。起点是开发人员将代码提交到版本控制系统中,终点是将软件部署到生产环境交付给用户。在上面介绍的部署流水线的相关实践,在该图中都有所体现。


  • 版本控制系统和制品库是源代码和制品的单一可信数据源。制品库中的部署包只能通过版本控制系统中的源代码编译构建产出,并上传到制品库。后面测试环境和生产环境需要的部署包都来自同一个制品库,保证了部署包的唯一性。
  • 测试环境和生产环境都是通过部署平台统一部署,测试环境可以由测试人员自服务部署,生产环境可以由运维人员一键部署。
  • 不管是测试环境还是生产环境,当软件部署完成后,通过冒烟测试验证服务是否正常启动。

image.png


如下图所示,自动化部署平台提供一键部署的功能。用户只需要选择在哪个环境、使用哪个软件版本,采用什么样的部署策略即可。

image.png


部署策略

部署策略是针对生产环境的,因为生产环境是用户使用的真实环境,部署失败可能会对用户造成严重影响。因此,在部署生产环境时要采取低风险、零停机的部署方式。目前常用的方式有蓝绿部署、金丝雀发布和特性开关等方式。


  • 蓝绿部署:蓝绿部署是指有两套相同的生产环境,一套叫蓝环境,一套叫绿环境。如上图中两种不同的颜色。假如当前用户正在使用作为生产环境的蓝环境。如果要发布一个新版本,先把该版本发布到绿环境中,并在绿环境中进行冒烟测试来检查服务是否可以正常工作。当一切准备就绪后,将用户引导到绿环境即可完成新版本的升级。如果此时出现问题,再将用户切换回之前的蓝环境即可完成回滚。这样不会对用户造成太大的影响。


  • 金丝雀发布:金丝雀发布是指将新版本的服务部署到生产环境的一部分服务器中,如上图所示。通过一小撮用户试用的方式,可以快速得到反馈,及时的发现新版本中存在的问题,而不会影响大部分用户。如果新版本出现问题,只要不把流量引导到有问题的新版本上就行。另外,金丝雀发布的方式可以用来做 A/B 测试,将一部分用户引导至新版本和旧版本上,分别分析不同版本对用户、收入等指标的差异。


  • 特性开关:特性开关是一种轻松开启和关闭功能的方式。当软件部署到生产环境中,此时该功能并未对用户开放,只有通过特性开关启用该功能时,用户才能使用该功能。如果此时发现问题,只需要将开关关闭即可。特性开关实现也比较简单,可以在代码中通过 if-else 的方式控制代码执行的路径。

总结

部署流水线是 CICD 的重要组成部分,也是实现持续部署的重要环节。这一部分在企业里一般属于运维侧平台,随着 DevOps 的普及,开发和运维的界限越来越模糊,开发人员可以利用运维开发的部署平台自服务,根据业务需求随时发布软件到生产环境。

凌云Cloud
目录
相关文章
我是小ba吖
|
7月前
|
jenkins Devops 机器人
【devops】九、Jenkins流水线(下)
【devops】九、Jenkins流水线(下)
我是小ba吖
83 0
我是小ba吖
|
7月前
|
jenkins Devops 持续交付
【devops】九、Jenkins流水线(上)
【devops】九、Jenkins流水线(上)
我是小ba吖
120 1
清雨小竹
|
7月前
|
Java Linux Docker
阿里云云效流水线自动化构建Java项目并发布到docker环境
阿里云云效流水线自动化构建Java项目并发布到docker环境
清雨小竹
367 0
周周的奇妙编程
|
20天前
|
人工智能 运维 Devops
云效流水线智能排查功能实测:AI赋能DevOps,精准定位与高效修复实战评测
云效持续集成流水线Flow是阿里云提供的企业级CICD工具,免费且注册即用。它具备高可用性、免运维、深度集成阿里云服务、多样化发布策略及丰富的企业级特性。产品亮点包括智能排查功能,能快速定位问题,提高问题解决效率。云效Flow支持一站式DevOps流程,适用于各种规模的企业,助力实现高效、高质量的软件交付。现在即可免费试用,体验智能CICD解决方案。
周周的奇妙编程
20088 3
雅纯
|
6月前
|
人工智能 JavaScript Java
DevOps流水线运行出错怎么办?AI帮你智能排查
目前云效流水线Flow内Java构建、Node.js构建、Java单元测试、Node.js单元测试这4个步骤均接入了智能排查的能力。运行流水线时,如果在这4个步骤上出错,均可获得智能排查建议。
雅纯
462 2
DevOps流水线运行出错怎么办?AI帮你智能排查
小Lee
|
9月前
|
Kubernetes Java Maven
阿里云云效流水线中的Java构建Docker镜像并推送到镜像仓库和Kubernetes镜像升级这两个节点的区别
阿里云云效流水线中的Java构建Docker镜像并推送到镜像仓库和Kubernetes镜像升级这两个节点的区别
小Lee
434 1
一个小浪吴啊
|
10月前
|
存储 关系型数据库 MySQL
rancher服务部署之DevOps流水线(一)—基础数据库服务部署及rancher相关配置私服信息
rancher服务部署之DevOps流水线(一)—基础数据库服务部署及rancher相关配置私服信息
一个小浪吴啊
325 0
我是小七
|
运维 Devops 测试技术
Devops 如何使用 Codeup 和流水线构建发布流程
Devops 如何使用 Codeup 和流水线构建发布流程,让发布更顺畅
我是小七
724 0
Devops 如何使用 Codeup 和流水线构建发布流程
DevOps在路上
|
SQL 安全 Devops
DevOps流水线设计的最佳实践
谈到到DevOps,持续交付流水线是绕不开的一个话题,相对于其他实践,通过流水线来实现快速高质量的交付价值是相对能快速见效的,特别对于开发测试人员,能够获得实实在在的收益。很多文章介绍流水线,不管是jenkins,gitlab-ci, 流水线,还是drone, github action 流水线, 文章都很多,但是不管什么工具,流水线设计的思路是一致的。于此同时,在实践过程中,发现大家对流水像有些误区,不是一大堆流水线,就是一个流水线调一个超级复杂的脚本,各种硬编码和环境依赖,所以希望通过这篇文章能够给大家分享自己对于Pipeline流水线的设计心得体会。
DevOps在路上
1038 1
WalesKuo
|
运维 Devops 测试技术
DevOps实践-设计-部署流水线设计
在一个软件产品公司中,一般的基础设施会包括在每个产品线上的各种环境、以及针对这些环境构建起来的部署流水线。
WalesKuo
415 0
DevOps实践-设计-部署流水线设计

热门文章

最新文章

  • 1
    流水线运行出错排查难?AI 来帮你
  • 2
    云效产品使用报错问题之流水线发布uniapp的应用失败如何解决
  • 3
    构建高效自动化运维体系:DevOps与容器技术融合实践
  • 4
    构建高效稳定的云基础设施:DevOps与容器化技术融合实践
  • 5
    云效产品使用报错问题之流水线打包docker镜像时报网络代理有问题如何解决
  • 6
    软件体系结构 - 流水线技术
  • 7
    云效产品使用报错问题之想用流水线A执行结束,触发流水线B,配置失败如何解决
  • 8
    云效产品使用常见问题之流水线的容器读取本地的挂载文件失败如何解决
  • 9
    云效产品使用报错问题之流水线中配置了AppStack,构建时下载的制品内容为json字符串,如何解决
  • 10
    【Shader渲染流水线流程】
  • 1
    【架构】流水线结合生产者消费者模型赋能模型推理过程
    24
  • 2
    流水线之项目打包找不到rt.jar
    104
  • 3
    你以为搞个流水线每天跑,团队就在使用CI/CD实践了?
    125
  • 4
    云效问题之流水线使用npm制品仓库构建拉取依赖特别慢如何解决
    123
  • 5
    云效流水线问题之推送镜像报443连接超时如何解决
    38
  • 6
    云效流水线部署函数计算任务时出现了错误
    42
  • 7
    「达摩院MindOpt」优化FlowShop流水线作业排班问题
    58
  • 8
    通过云效流水线进行部署任务
    70
  • 9
    Jenkins Pipeline 流水线任务 补充篇
    53
  • 10
    Jenkins Pipeline 流水线方式部署 SpringBoot 项目2
    169
  • 相关课程

    更多
  • 阿里云DevOps助理工程师认证(ACA)课程
  • ALPD云架构师系列:云原生DevOps 36计 -阿里云云效出品
  • 基于 IaC 的云上自动化部署
  • 通过Knative轻松实现应用Serverless化交付
  • 如何通过Knative轻松实现应用Serverless化交付
  • Serverless 架构在软件研发工程实践方面的价值
  • 相关电子书

    更多
  • 阿里 DevOps 转型实践
  • 从黑盒运维到DEVOPS
  • 基于阿里云K8S服务快速构建DevOps流水线 资料下载
  • 相关实验场景

    更多
  • 使用ACK Serverless容器化部署大语言模型FastChat
  • 容器DevSecOps全链路体验
  • SAE+云效,10分钟快速打通CI/CD流水线
  • 高效敏捷开发体验
  • 这样做,项目管理简单高效
  • DevOps高效开发管理-云效实践初体验
  • 下一篇
    部署LAMP环境(Alibaba Cloud Linux 3)

    代做工资流水公司沈阳流水账单代做温州房贷收入证明模板淄博打消费贷流水蚌埠办公司银行流水信阳查询贷款工资流水黄冈贷款银行流水鞍山工资流水报价湖州银行对公流水代做菏泽薪资流水代做舟山做消费贷流水重庆个人银行流水代开打企业贷流水银川工资证明办理衡阳打印流水单鞍山办理银行流水单广州打企业银行流水宜春在职证明打印东莞薪资银行流水代做哈尔滨薪资流水代做上饶工资流水app截图报价保定工资银行流水多少钱温州开转账流水威海薪资流水查询哈尔滨打房贷收入证明邢台工作收入证明打印石家庄代办房贷流水南昌企业对私流水代开赣州流水单打印咸阳在职证明开具信阳银行流水PS公司香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

    代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化