DevOps的出现是“左移运动”的具体体现,是为了按时交付软件产品和服务,可看作开发、运维和质量保障三者的交集,旨在通过改善这三个部门之间的协作,提高组织提供应用程序和服务的速度,从而更好地为客户服务并在市场中保持竞争力。遗憾的是, 在经典DevOps 环中的“Test”并没有凸显QA团队的作用。
图片
DevOps的实施涉及到多个方面,包括自动化工具的使用、持续集成/持续部署(CI/CD)的实践、监控和日志分析系统的建立等。通过这些实践,DevOps可以确保软件在开发、测试、部署和运维等各个环节中都能够保持高效、可靠和一致。
DevOps 的技术组成
DevOps 涉及了技术、组织、文化等多个领域,就相关技术技能而言, 大约包括以下几个层次:
图片
基础的技术技能包括版本控制、Linux 操作系统的操作、编程技能、数据库和网络操作等,其中与Ops相关的编程主要是Shell 和Python。CI/CD 是DevOps 的关键环节,常见的工具包括Jenkins、Github Action,GitLab CI 等。容器化技术保证了CI/CD 的环境一致性,同时为服务和网络的编排提供了工具。就具体的部署环境而言, IaC 是实现面向混合云快速部署的关键。监控和日志与传统运维领域的技术类似,区别可能是颗粒度不同。
DevOps 中CI/CD 流水线
CI/CD 是DevOps 的关键技术点,工作流及其流水线是工程效率提升的主要体现。
图片
CI/CD有助于从初始代码提交到部署的软件开发过程。通过自动化流水线,它消除了传统上将代码运送到生产环境所需的大量手动人工干预。
持续集成(CI)包括自动化构建、执行测试以及将单个开发人员的代码合并到共享存储库中。持续集成的主要目标是有效地将源代码集成到共享存储库中。一旦将更改提交给版本控制系统,就会执行自动构建和测试用例,以确保代码的功能和有效性。这些过程验证源代码如何编译以及测试用例在执行期间如何执行。
其中代码入库可以做成一个单独的流水线:
图片
构建和测试作为另一条流水线:
图片
持续部署(CD)是 CI/CD 流水线中 CI 之后的下一步,是自动部署将自动测试阶段传递到生产环境的每个代码更改的实践。其典型的流水线如下:
图片
持续部署的重点是在生产环境中快速部署代码变更。它的根源可以追溯到敏捷宣言,强调“早期和持续交付的有价值的软件”来满足客户。真正的持续部署是具有挑战性的,而且没有像 CI 那样被广泛采用,但是一个更常见的实践方式是持续交付(Continuous delivery)。持续交付和持续部署的主要区别在于,持续交付可能侧重于“ready for production”,不是自动完成上线,而是完成上线准备。
从DevOps 到MLOps
如果对DevOps中的Dev 进行领域划分和扩展,就会形成XOps。随着人工智能的广泛使用, 机器学习成为了Dev 中的一个重要领域,从而形成了DevOps 的一个变体——MLOps。
MLOps的核心思想是将DevOps的流程和工具应用于机器学习领域,以实现机器学习应用的持续集成、持续交付和持续部署。MLOps的目标是通过使机器学习的开发、测试和部署更加自动化来增强软件开发的效率和质量。
MLOps可以更好地管理机器学习模型的生命周期,包括数据准备、传输和转换、模型训练和优化、模型评估和选择、模型部署和监控等。同时,MLOps也可以帮助团队管理开发和生产环境之间的差异,保证模型在生产环境中的稳定性和可靠性。简单而言,MLOps增加了领域特殊性的环节——持续训练(Continuous Training,CT)。
图片
MLOps的引入,使得机器学习模型的开发和部署流程更加高效,从而加快了AI应用的创新速度并降低了错误率,还有助于加强数据安全性和合规性,并提高机器学习应用的可靠性和可维护性。
至于LLMOps, 后续会有专门的文章重点总结。
面向基础设施的DevOps
DevOps 不仅仅适用于软件交付,而是面向整个IT交付领域。那么,如何将DevOps应用于基础设施呢?如何高效、智能地管理和配置基础设施呢?
这就需要IaC,IaC 是面向基础设施的DevOps 的关键技术。面对基础设施尤其是网络环境的多样化和差异性,对网络进行建模是实现IaC的前提。
通过模型驱动的方式,IaC是一种将基础设施管理过程自动化的方法,通过使用编程语言来描述和管理基础设施资源,实现对基础设施的快速部署、配置和管理。