如果将DevOps应用在的应用程序生命周期中,它解决的问题很少。它用于自动化应用程序装配线,是实现数字化转型的强大工具。
用查尔斯•狄更斯的话说,“这是最好的想法,也是最坏的想法。”这指的是什么?DevOps以及它是如何被解释的。
DevOps的最佳理念是基础架构即代码,即IaC。与手动构建应用程序环境不同,这是一个漫长且容易出错的过程,IaC定义了在模板中构建环境的“方式”,然后使用模板定义自动构建该环境。
这以计算机速度而不是人类速度发生,而且同样重要的是,每次都始终如一地完成,从而大大提高了应用程序质量。做得好,DevOps可以极大地提高应用程序的速度。
这种应用程序开发和部署的方法被称为“左移”,因为它在应用程序生命周期的早期移动了后期开发任务。
然而,DevOps挑战比比皆是
然而,虽然DevOps的基础设施即代码是它的最佳理念,但它也是——正如它通常被实施——是最糟糕的理念之一。
开发人员经常被告知他们应该负责创建IaC模板。这有一些逻辑。毕竟,应用程序的开发人员应该最了解其基础设施需求,对吧?
另一方面,这也使开发人员负责了解生产网络要求、大规模存储配置和弹性资源管理。由于这种繁重的需求,可以公平地说,根据应用程序生产环境的复杂性,DevOps并不是灵丹妙药。
然而,受左移口号的启发,许多IT组织认为在应用程序生命周期的早期移动其他任务是有意义的。因此,开发人员开始负责测试。和安全。和补丁管理。
不幸的是,正如通常所追求的那样,这些任务并未被视为“代码”。也就是说,以前负责他们的小组将责任连同通常用于执行小组任务的手动清单一起传递给了开发人员。因此,开发人员在他们没有特别专业知识的领域进行了大量的手动工作。
你猜怎么着?做某事的开发人员不会更快地完成任务,尤其是在主题专业知识较低的情况下。因此,DevOps方法的潜在速度通常仍然远低于预期。
右移左移
那么,左移“作为代码”方法的前进道路是什么?应用程序是否注定要陷入由不堪重负的开发人员执行的手动流程中?
一句话,没有。但组织需要以正确的方式左移。以下是有关如何做到这一点的三个提示。
(1) 自动化所有任务
如果将基础设施作为代码进行是有意义的,那么将测试作为代码进行、将安全作为代码进行、将补丁管理作为代码进行也是有意义的。换句话说,将DevOps的逻辑应用于生产路径中的所有步骤。
当然,这意味着将开发技能应用于这些任务,这需要开发人员。期望主题专家(例如,QA工作人员)的个人资料发生变化,以纳入编程经验。这也意味着将每个任务自动化管理为自己的应用程序,并具有自己的生命周期管理。
(2) 将生产路径视为自动化产品
拥有最快生产路径的技术组织将整个过程视为一个集成产品,在其各个子步骤中实现自动化。这意味着中间步骤之间的自动切换和消除手动批准。我在看着你,变更控制委员会。
在现实世界中,大多数手动批准步骤都是自动勾选审查框的正式仪式。如果从一个步骤到另一个步骤的切换可以简化为自动点头,那么它也可以简化为自动切换,并具有明确定义的异常处理。
这也意味着生产路径需要将整体作为产品本身进行管理,并进行架构审查以确保所有自动化子系统相互配合。
如果这听起来像是工作和投资,那你是对的。然而,如果没有这个,生产路径将保持缓慢,两端的速度(通过Dev和Ops)在中间预订相同的旧缓慢手动步骤。
(3) 更左移
虽然自动化所有任务(以及自动化整个流程)是很好的步骤,但如果易受攻击或过时的代码构成应用程序的基础,那么确保良好的安全性仍然是一个挑战。俗话说,垃圾进,垃圾出。
当已知漏洞或有人对其进行攻击时,这些类型的安全漏洞会变得更加糟糕。随之而来的是更新代码库并将更新投入生产的疯狂争夺。
当开发人员从一张白纸开始,直接从Internet下载库和组件时,这个问题就很普遍。令人震惊的是,有多少基于容器的应用程序是使用从DockerHub下载的图像构建的,尽管众所周知,许多最流行的应用程序都包含过时和/或易受攻击的代码。
更好的方法是为开发人员提供准备好的代码库,这些代码库已知是最新的,并且评估为没有漏洞。这方面的机制称为模板、框架或加速器。本质上,开发人员将模板下载到首选IDE中,并从包含应用程序功能的安全代码基础开始。
应用程序更新完成后,将进入上述自动化过程。创建应用程序工件并在生命周期的不同阶段移动,直到最终部署。
这种代码卫生方法可以扩展到生命周期的其余部分,方法是让一个进程位于特定应用程序管道之外以监控已公布的漏洞。如果发布了漏洞并提供了补丁,则会启动应用程序构建和部署过程,该过程会自动更新相关工件并将其投入生产。
这避免了手动跟踪每个应用程序包含哪些库和组件。它还避免了与尝试确保更新每个相关应用程序相关的危机管理,这不可避免地会遗漏一些并导致易受攻击的应用程序永远无法修复。
这种“进一步左移”的新兴行业术语是安全软件供应链,这种方法将在未来变得更加普遍,尤其是随着越来越多的业务流程转向数字机制。
事实上,DevOps既是一个好主意,也是一个坏主意,这取决于应用的方式。在应用程序生命周期上,它解决的问题很少。作为应用程序装配线的一部分的自动化概念,它是实现数字化转型的强大工具。