CI/CD:DevOps背后的推动力-程序员宅基地

DevOps的出现并非只是为了顺应开发人员和运维人员应该协同合作的理念,更大程度上,它是企业在走向现代化应用交付的过程中需要经历的文化转型。DevOps的最终目标是能够更频繁地发布高质量的软件,并通过促进沟通和协作来实现这一目标。

\\

Octopus Deploy创始人兼首席执行官Paul Stovell说:“现如今,团队应该做出更快的改变。如果没有开发人员和运维人员成功合作,实现快速改变的机会几乎为零“。

\\

CI/CD管道是DevOps背后的推动力,这种推动力依赖DevOps的内聚性,并将其带入到现代软件的开发和交付当中。

\\

来自CA Technologies的持续交付总经理Jeff Scheaffer说:“正在进行数字化转型的公司在面临组织变革时,DevOps通常被认为是一剂良药,但CI/CD管道才是推动DevOps走向成功的引擎,帮助企业更快地交付更好的应用。这是企业从手动转向自动化、从单体应用交付转向现代应用交付的核心业务流程“。

\\

OpsGenie联合创始人兼工程副总裁Sezgin Küçükkaraaslan说,在讨论DevOps时经常会提到CI/CD管道,因为它在团队之间建立起了桥梁,并帮助他们看到了更大的蓝图,这个蓝图就是能够成功构建出软件系统,并交付给用户。

\\

他说:“CI/CD管道是将代码移交到生产环境最快的一种方式。开发人员能够通过自动化且不易出错的方式轻松地构建、打包、集成、测试和发布代码“。

\\

Küçükkaraaslan补充道,DevOps专注于文化,而CI/CD管道则专注于能够帮助团队适应不断变化的文化的过程和工具。

\\

Stovell说,CI/CD管道是DevOps的关键推动者,因为它消除了DevOps流程中的摩擦因素,从而可以更快地发生变化和投入生产。他还解释说,消除的摩擦越多,发生变更的周期就越短。“这意味着你正在推动业务向前发展,并创造出了一个反馈闭环以及持续改善的环境”。

\\

如何保持管道的流动性

\\

Mobile Labs总裁兼首席执行官Dan McFall说,管道“实际上是发布流程自身的一个循环。它是一个持续的过程,包括编写代码、测试代码、部署代码、在生产环境中重新测试,然后再次完成对整个过程的反馈。这是实现高质量发布并持续运作一切的能力“。

\\

如果能够从更宽泛的角度来思考管道,它将会让你看到更完整的生命周期,不仅包括了将软件交付到生产环境,还会看到它时如何交付的以及交付之后会发生什么。Stovell说,如果事情失败了,你可以看到出了什么问题,并很容易进行恢复。

\\

API Fortress创始人Patrick Poulin说,CI/CD管道中最重要的方面是C,它代表持续性。为了在CI和CD方面获得成功,你必须“具备在不影响其他事情的情况下持续前进的能力”。

\\

管道包含了一个发布阶段,首先你要知道自己要交付什么,然后进入测试阶段、预生产阶段、部署阶段,最后进入生产环境。来自XebiaLabs的首席产品官Robert Stroud说,这当然是一种经过简化的管道,它的基本思想是以自动的方式经过这些阶段或批准点。“目前业界存在几个切入点,我们将这些切入点交给开发团队、测试团队、阶段发布团队和部署团队,而只有自动化所有这些步骤和阶段才能真正加速整个过程。”

\\

来自CA的Scheaffer说,之所以被形象化地称为管道,是因为在理想情况下,变更是从头到尾一个接一个地发生。

\\

来自OpsGenie的Küçükkaraaslan说,从更高的层面来看,管道“包括在代码库合并之前进行的编译、打包和基本测试。将代码合并到主分支之后,将运行其他测试,以确保应用程序能够使用真实的配置和其他服务。性能和安全测试也在这个时候运行。随后就可以将代码部署到staging环境,然后再到生产环境“。

\\

Scheaffer说,保持管道的简单性、可见性和可衡量性是让管道奏效的最好方式。这里的关键因素包括管道的自动化和编排、改进、与利益相关者保持一致,以及对“好”的评估能力。

\\

McFall说,“DevOps让你以渐进和可管理的节奏取得进展,让你能够在软件准备就绪时拥有更强的信心,并且确实交付了正确的东西“。

\\

小心管道出现扭结

\\

Scheaffer说,管道应该是流动式的,不同的阶段可以同时发生。“例如,测试可以不需要等开发完成编码才开始进行。相反,测试可以与开发同时进行——与开发一起并行测试更小的代码块“。

\\

Scheaffer解释说,管道就像一根含有多级玻璃纤维的光缆。“每根玻璃纤维都可以代表单个应用程序的工作流,你可能会有许多不同的应用程序在管道中移动,而你需要做好协调工作”。

\\

不过,同时运行多条线索很容易带来复杂性,所以不要让你的管道成为瓶颈。OpsGenie的Küçükkaraaslan建议DevOps团队要不断监控所有组件,确保能够发现问题并尽快解决。

\\

另外,他还解释说,团队应该密切关注测试性能。“大家都喜欢将新代码快速发布到生产环境,但如果没有经过正确的测试,这样做是非常危险的。系统相互依赖的复杂性意味着一切都有可能出错。监控测试环境中新代码的执行情况对于发布稳定的版本来说至关重要。所以,尝试在快速测试和模拟生产环境测试之间找到最佳平衡。“Stroud说,拥有良好的测试套件和良好的测试覆盖率可以更好地了解部署了什么、部署在哪里和部署时间。

\\

Küçükkaraaslan解释说,CI/CD管道不是一成不变的,它会随着时间推移而发生演化,团队和业务需要能够随着管道一起演化。

\\

他说:“我们不断努力改善我们的CI/CD性能,并拥抱最佳实践。也就是说,我们一直在收集每个参与交付新功能的人的反馈意见,以便找到可以改进的地方。随着业务的发展,我们的CI/CD流程也必须跟着演化“。

\\

McFall说,如果你没有为CI/CD管道创建反馈循环,那么实际上你并没有在实施DevOps。“建立反馈循环的好处是,它可以让你有更强的信心和更快的速度去做事情。”即使现在团队可以把所有东西都推到生产环境中,但这并不意味着他们应该一直这么做。这就是反馈循环发挥作用的地方,因为它确保你可以听到客户的意见,而不只是一直在推出新的东西。“请注意你的同事在做什么,他们的成功之处在哪里,以及是否有机会不要犯同样的错误“。

\\

Scheaffer建议我们远离快速修复方法。他说:“在生活中,快速取得胜利是很诱人的,但也是要付出代价的。在CI/CD管道中,它表现为技术债务,发展脚步停滞不前,其他团队无法参与进来,以及在组织内部对什么是’好’的东西理解不一致。其结果是要花费很多精力重建管道“。McFall相信组织会不断试图找到一种适用于所有工具的方法,而实际上,他们真正需要做的是找出对他们的业务和风险状况有意义的事情。

\\

Stroud表示,要尽可能地利用自动化,但不要陷入自动化孤岛的局面。Stroud解释说,目前管道中存在的一个常见问题是,企业的自动化并没有覆盖所有部门,因此存在自动化孤岛。“DevOps的关键规则之一是我们需要在整个工具链中进行一致的协作,否则它就变成年轻玩家最大的陷阱之一”。组织可以通过标准化和合理化他们在每个孤岛中使用的工具来解决这个问题。

\\

最后,不要陷入责备文化。Stroud说,当事情失败时,关键的不是问责,而是想想如何能够做得更好,如何提高速度,以及如何交付更好的结果。“你希望人们试错,并从错误中学习。这必须成为DevOps的基本原则,而不是在发现部署的变更不符合要求之后对谁严加指责。借鉴这些经验或反馈,并在未来改变你的流程,这样你就可以持续创造价值“。

\\

持续交付与持续部署

\\

Stroud说,尽管CD通常被称为持续交付,但一些组织正在将其视为持续部署。

\\

现如今,软件变更在规模、性质和增量差异方面正逐渐缩小。这种变化使得团队能够达到可以自动部署的程度。Stroud说:“现实情况是,我们最终按照迷你的速率进行部署。变更在瞬间就发生,可能是每周一次,某些组织会收集变更,并把它们组合在一起,然后按月部署。具体情况取决于业务和业务转型的意愿“。

\\

为了跟上变化的速度,团队需要采用良好的部署方法,例如金丝雀发布。如果使用金丝雀发布,变更先被发布到一小组样本实例上,以便验证变更是否没有问题。如果使用蓝绿部署,就可以以一种可控的方式让不同的用户收到变更。开发者可以收到反馈,确保交付的东西符合要求。

\\

Stovell说,在部署软件时一个常见的错误是,团队编译代码并将其部署到测试环境中,而在进入生产环境时再次编译代码。“这不是一个好的做法,因为在你第二次编译代码时,会引入很多潜在的问题。你无法保证你测试过的东西就是最后进入生产环境的那个“。正确的做法是只构建一次,保留构建过程中生成的文件副本,然后将其部署到测试环境和生产环境中。

\\

成功实现持续部署的另一种方式是为每个环境提供一致的流程。Stovell说:“保证生产环境部署成功的最好方法就是确保生产环境的流程尽可能与其他环境保持一致。”

\\

Küçükkaraaslan说,部署管道的高级别视图被称为DevOps组装线。他说:“我们所要面临的挑战是,DevOps工具链并不像CI/CD那样完善,并涉及到对人的依赖,因此可能会效率低下。DevOps组装线尝试将活动连接到基于事件驱动的工作流程中,然后可以将这些工作流程与特定的应用程序或服务相关联“。

\\

实现以API为主导的DevOps方法

\\

API Fortress创始人Patrick Poulin说,如果你将CI/CD管道视为一直在运行的软管,那么API测试就是拖慢流速的扭结。

\\

API测试已经成为DevOps开发过程中的一个痛点,因为它一直被忽视。他说:“这是人们一直在拖延的事情之一,因为可能不存在一种工具可以让这个问题变得容易解决,或者因为它需要大量的开发工作”。

\\

如果团队没有测试这些API,那么在错误发生时他们可能就捕获不到,或者需要数周时间才能发现错误,因为除非API完全不可用,否则他们将看不到任何问题。Poulin说:“如果一直延续下去,可能会变成一个非常严重的错误,只因团队没有对其进行全面的测试”。

\\

与自动化网站和应用程序测试相比,DevOps团队需要在API测试中也投入同样的工作量。Poulin说:“相比前端,API也同样重要,API涉及到公司系统的每个部分,因此对测试、可靠性和正常运行时间有足够的了解”。

\\

团队应该要测试所有的API,而不仅仅是测试单个端点。还要创建集成测试,也就是用于重现常见用户流程的多步骤任务。Poulin解释说,你不仅需要对单个功能很了解,而且还需要知道它们在与其他功能或过程结合在一起时是如何工作的。“当你以真实的用户体验方式来测试你的东西,就会发现它们之间存在的差别”。

\\

关键在于要找到一种工具或平台,让每个人都可以知道API的状态,比如我的API在运行中吗?昨天有没有出现API问题?Poulin说:“如果你有适当的工具,任何人都可以通过几次点击就可以得到答案,并充分了解他们的API的健康状况”。

\\

将基础设施引入管道

\\

根据云管理解决方案提供商TriNimbus的首席技术官Goran Kimovski的说法,DevOps和CI/CD管道有两个价值原则。第一个原则是不断整合代码变更,并按照一组定义好的测试标准进行测试。Kimovski说,这是一个非常有吸引力的主张,因为你可以持续确保代码可以正常运行。第二个原则往往难以实现,那就是加速采用。Kimovski解释说,开发人员编写的应用程序代码需要部署到某种基础设施上,但这一过程通常与手动变更管理流程相关联。

\\

他说:“软件行业已经花了多年时间在单元测试以及像自动化集成测试、最终用户测试、性能测试这样的概念上,但测试基础设施的整体概念仍处于早期阶段,测试代码本身都很困难。”

\\

Kimovski说,这是因为开发人员需要调配和部署基础设施。而传统方案则包括实际的硬件或虚拟环境,要求传统的网络工程师、IT运维和系统管理员了解相关技术,将硬件组合在一起,建立网络,创建虚拟机并将它们交给开发人员或QA去配置,然后再让其他人在上面部署应用程序。“这一过程需要由多人来处理,并依赖大量的体力劳动,不稳定或不可重复“。Kimovski补充说,这不仅耗费时间,还会引入外部成本。

\\

Kimovski建议基于云来实现CI/CD管道。他说:“在云中配置一台服务器,运行15分钟后关闭,你只需要为此支付15分钟的费用。而在某个数据中心里配置服务器意味着你必须拥有物理硬件,这对你的业务而言是额外的成本。”另外,使用物理硬件来测试基础设施代码会有所限制,因为不是每个人都可以访问到它。他解释说,云将其大众化,并将其转化为运营成本。

\\

英文原文:https://sdtimes.com/cicd/cicd-driving-force-behind-devops

\\

感谢张婵对本文的审校。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cpongo4/article/details/89099357

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf