DevOps落地笔记-14|部署流水线:打造一站式部署的关键平台

这篇具有很好参考价值的文章主要介绍了DevOps落地笔记-14|部署流水线:打造一站式部署的关键平台。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上一课时我主要介绍了实现自动化测试的范围、流程和结构图,自动化测试是持续集成实践不可或缺的一部分,从而使得软件向高效率和高质量迈进了一大步。持续集成主要关注的是代码是否可以编译成功、是否可以通过单元测试和验收测试等。但持续集成并不能实现软件包向测试环境和生产环境部署的要求。如果软件包不能很快的部署到测试环境和类生产环境,就导致开发人员不能及时的收到反馈,就会使软件存在更多的缺陷。今天介绍的内容——部署流水线,就是搭建一套从开发到测试,到运维的流水线,能够实现一键式的将软件部署到生产环境。

什么是部署流水线?

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

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

& 提交阶段,代码提交后会运行代码编译、自动化单元测试以及对代码进行动静态扫描;

& 自动化测试阶段,主要是从功能性和非功能性方面验证系统是否可用,并且满足用户需求;

& 手工测试阶段,主要是用户验收测试,用于验证系统是否为用户提供了价值;

**发布阶段,**将软件交付给用户,交付方式有多种,可以是独立部署的方式,也可以是 SaaS 服务的方式。

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

部署流水线相关实践

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

一包到底

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

& 减少了编译时间:每次编译都需要花费时间,并且占用编译机的资源,如果代码库比较大重复编译将是一场灾难。

& 保证部署包的一致性:因为在各个阶级进行测试的部署包都是同一个,这样可以保证部署到生产环境中的部署包与前面测试阶段验证过的部署包是完全一样的。

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

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

相同的部署方式

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

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

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

对部署冒烟测试

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

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

如何实现部署流水线

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

& 版本控制系统和制品库是源代码和制品的单一可信数据源。制品库中的部署包只能通过版本控制系统中的源代码编译构建产出,并上传到制品库。后面测试环境和生产环境需要的部署包都来自同一个制品库,保证了部署包的唯一性。

& 测试环境和生产环境都是通过部署平台统一部署,测试环境可以由测试人员自服务部署,生产环境可以由运维人员一键部署。

& 不管是测试环境还是生产环境,当软件部署完成后,通过冒烟测试验证服务是否正常启动。
init:devops 标书,java,devops,笔记,运维,java,后端
部署流水线中的很多阶段在之前的课时中都有涉及,提交阶段的编译打包、代码扫描、自动化测试、环境管理等,这里就不做太多阐述。我主要介绍一下自动化部署和发布到生产环境相关的内容。如下图所示,自动化部署平台提供一键部署的功能。用户只需要选择在哪个环境、使用哪个软件版本,采用什么样的部署策略即可。
init:devops 标书,java,devops,笔记,运维,java,后端
自动化部署平台

自动化部署平台是部署流水线中的重要组件,通过封装统一的部署流程,提供易用的用户界面,对外提供统一的软件部署的能力。部署平台提供一套部署脚本,屏蔽测试环境和生产环境的差异。在进行自动化部署时,只需要提供部署的软件版本以及要部署的目标环境,采用什么样的部署策略(只对生产环境有效),点击“开始”按钮,所有的部署过程都是自动化的。

关于“部署软件”和“发布软件”,很多人认为它们是一样的,他们的区别在于 “发布”是一个业务行为。部署软件是将软件部署到生产环境中,但部署的服务是否发布给用户是由业务决定的。目前很多企业中,部署和发布是相等的,软件部署到生产环境就直接发布给用户使用了。但有些功能这样做会有问题,特别是跟时间、位置相关的功能。比如促销活动,只能在固定的时间范围内有效。只不过目前的发布并不是由业务人员手动点击发布按钮触发,而是由程序自动化的触发。

部署策略

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

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

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

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

总结

本课时介绍了使用部署流水线实现一键部署软件到测试环境及生产环境,通过自动化的方式完成软件部署的最后一公里。部署流水线并不是指用于部署,而是从代码提交到代码库到最终部署到生产环境的整个过程,包含了前面提到的代码扫描、自动化测试和环境管理等阶段。为了更好地实施部署流水线,介绍了几个关键的实践以及通过自动化部署平台完成部署这个阶段的操作,最后介绍了零停机发布到生产环境的几种部署策略,实现低风险发布。部署流水线是 CICD 的重要组成部分,也是实现持续部署的重要环节。这一部分在企业里一般属于运维侧平台,随着 DevOps 的普及,开发和运维的界限越来越模糊,开发人员可以利用运维开发的部署平台自服务,根据业务需求随时发布软件到生产环境。文章来源地址https://www.toymoban.com/news/detail-835048.html

到了这里,关于DevOps落地笔记-14|部署流水线:打造一站式部署的关键平台的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云计算课程第四次实验-搭建DevOps流水线

    子任务2:搭建DevOps流水线环境   本实验以主机本地虚拟机为载体,搭建Dev-ops流水线环境 使用的工具: 目录 一、实验概述 1.实验名称 2.实验目的 3.实验环境 二、实验内容 1.实验设计 2.实验过程 1.gitlab-server的搭建 2.harbor-server的搭建 3.Jenkins-server的搭建 4.Web-server的搭建 5.Dev搭

    2024年02月03日
    浏览(65)
  • DevOps系列文章 之GitLabCI模板库的流水线

    目录结构,jobs目录用于存放作业模板。templates目录用于存放流水线模板。这次使用​ ​default-pipeline.yml​ ​作为所有作业的基础模板。 作业模板 作业分为Build、test、codeanalysis、artifactory、deploy部分,在每个作业中配置了rules功能开关,由变量控制最终作业的运行。 jobs/buil

    2024年02月16日
    浏览(52)
  • (十六)devops持续集成开发——jenkins流水线构建之邮件通知

    本节内容主要介绍jenkins在流水线任务构建完成后的通知操作,使用jenkins的邮件通知插件完成构建任务结束的通知。一般项目发布都会通知相关的责任人,这样项目发布在出现问题时能够及时的处理。 ①在插件中心安装Email Extension邮件通知插件 ②申请一个发送邮件的邮箱服务

    2024年02月21日
    浏览(65)
  • 用diffuser代码方式打造Ai作画流水线(1)

    stablediffusion已经成为作画人的标配,通过sd的ps插件,或者通过SD webui就可以快速的构建出一套属于自己的Ai作画环境。这种可视化的界面确实方便也是更好艺术家个代码工程师协同合作的模式,可视化界面方便艺术家创造,需要更多组建、模型支持时候可以算法工程师来帮忙

    2024年02月11日
    浏览(45)
  • PingCode DevOps 团队:企业CICD流水线可能会遇到的问题及解法

    CICD 流水线是指一系列自动化的构建、测试和部署步骤,用于将应用程序从开发到生产环境的过程。在 CICD 流水线中,每个步骤都是自动化的,并且在完成后会触发下一个步骤的执行。 CICD 流水线可以帮助团队更快地交付产品,减少手动错误,并提高软件质量。通过自动化构

    2024年02月10日
    浏览(50)
  • (十四)devops持续集成开发——jenkins流水线使用pipeline方式发布项目

    本节内容我们使用另外一种方式pipeline实现项目的流水线部署发布,Jenkins Pipeline是一种允许以代码方式定义持续集成和持续交付流水线的工具。通过Jenkins Pipeline,可以将整个项目的构建、测试和部署过程以脚本的形式写入Jenkinsfile中,实现对整个流程的可视化管理和控制。在

    2024年02月21日
    浏览(60)
  • devops-5:从0开始构建一条完成的CI CD流水线

    前文中已经讲述了静态、动态增加agent节点,以动态的k8s cloud为例,下面就以Maven构建Java程序为例,开始构建出一条完整的CI CD流水线。 实现功能目标: 1.分别可以根据分支和tag从源码仓库clone代码 2.拿到源码后开始编译 3.构建image,并push到镜像仓库 4.部署到对应k8s集群 5.部署

    2023年04月20日
    浏览(62)
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用

    本节内容我们主要介绍在Jenkins流水线中,其构建过程中的一些构建策略的配置,例如通过远程http构建、定时任务构建、轮询SCM构建、参数化构建、Git hook钩子触发构建等,可根据不同的需求完成不同构建策略的配置。 - 构建策略说明: - 测试验证 - 构建说明 - 测试验证 - 配置

    2024年02月21日
    浏览(96)
  • Jenkins部署Docker与Jenkins流水线

    接上篇 1. 外挂文件的方式在docker容器中启动 2. 将构建运行放入docker容器中(不构建镜像) 修改Jenkins构建前设置 修改部署后操作 重新构建,已经成功构建在容器中 3. 将构建运行放入docker镜像中(采用dockerfile) 1.编写dockerfile,放入项目中, 注意不能和依赖的包同级 写好可

    2024年01月22日
    浏览(55)
  • [小白]Java自动部署之-流水线[超详细]

    个人博客: www.wdcdbd.com   devops文档链接: https://pan.baidu.com/s/12kOXbduI6daJBXQ0FWJaig?pwd=1234      提取码:1234 在我们开发写代码的时候,可以在本地启动,这样似乎挺方便的,但是如果我们想要部署到服务器上就很费劲了,不但要maven构建和将.jar包发布上去,还要重启等一系列麻

    2024年01月23日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包