FYIRH 发表于 2021-12-24 23:39:19

使用开源工具构建 DevOps 管道的初学者指南

本帖最后由 FYIRH 于 2021-12-24 23:44 编辑

DevOps已成为修复缓慢、孤立或不正常运行的软件开发流程的默认答案。但是,当您不熟悉DevOps并且不确定从哪里开始时,这并不意味着什么。本文探讨了什么是 DevOps 管道,并提供了五步创建过程。虽然本教程并不全面,但它应该为您提供基础,以供以后入门和扩展。但是首先,是一个故事。
我的 DevOps 旅程我曾经在云团队工作,开发了基础架构即服务(IaaS)Web应用程序来管理云基础架构,但是我一直对找出使开发流程更高效并带来更多收益的方法感兴趣。给开发团队带来积极的文化变革。我在云架构和基础架构工程首席技术官格雷格·拉文德(Greg Lavender)推荐的一本书《凤凰计划》中找到了答案。该书在解释DevOps原理时读起来像小说。
本书背面的表格显示了不同公司部署到发布环境的频率:





亚马逊,谷歌和Netflix的频率速率怎么可能?这是因为这些公司已经找到了如何制作接近完美的DevOps管道的方法。


我们在实施 DevOps 之前,情况肯定不是这样。那时,我的团队拥有不同的临时环境,但是到开发服务器的部署是手动的。所有开发人员都只能访问一台基于IBM WebSphere Application Server Community Edition的开发服务器。问题是,每当多个用户同时尝试进行部署时,服务器就会关闭,因此开发人员必须在要进行部署的时候互相告知对方,这是很痛苦的。此外,还存在代码测试覆盖率低,手动部署过程繁琐以及无法通过定义的任务或用户故事来跟踪代码部署的问题。


我意识到必须做些事情,然后我找到了一个有同样想法的同事。我们决定合作建立一个初始的DevOps管道-当我在Jenkins工作时,他建立了虚拟机和Tomcat应用程序服务器,并与Atlassian Jira和BitBucket集成在一起,并进行了代码测试。这个辅助项目非常成功:我们几乎完全自动化了开发流程,在开发服务器上实现了近100%的正常运行时间,我们可以跟踪和改善代码测试的覆盖范围,并且Git分支可以与部署和Jira任务相关联。而且,我们用来构建DevOps管道的大多数工具都是开源的。


我现在意识到我们的DevOps管道非常初级,因为我们没有利用JenkinsFile或Ansible等高级配置管理工具。但是,这个简单的过程效果很好,可能是由于Pareto原则(也称为80/20规则)。

DevOps 和 CI/CD 管道的简要介绍


如果您问几个人:“什么是 DevOps?您可能会得到几个不同的答案。像敏捷一样,DevOps 已经演变为涵盖许多不同的学科,但是大多数人会在以下几件事上达成共识:DevOps 是一种软件开发实践或软件开发生命周期(SDLC)。中心宗旨是文化变革,开发人员和非开发人员都在这样的环境中工作:以前的人工操作是自动化的;每个人都尽其所能;每个时期的部署数量增加;吞吐量增加;灵活性提高。虽然拥有正确的软件工具并不是实现DevOps环境的唯一条件,但某些工具是必需的。关键之一是持续集成和持续部署(CI/CD)。该管道是环境具有不同阶段(例如DEV,INT,TST,QA,UAT,STG,PROD)的地方,手动操作是自动化的,并且开发人员可以实现高质量的代码,灵活性和大量部署。


本文介绍了使用开源工具创建 DevOps 管道的五步方法,如下图所示。




事不宜迟,让我们开始吧。
步骤1:搭建CI/CD框架


您需要的第一件事是CI/CD工具。Jenkins是基于MIT许可证的基于Java的开放源代码CI/CD工具,它是使DevOps运动普及并已成为事实上的标准的工具。


那么,Jenkins 是什么?可以将其想象为一种神奇的通用控制器,它可以与许多不同的服务和工具进行通信并进行编排。仅靠Jenkins这样的CI/CD工具是没有用的,但是随着它集成不同的工具和服务,它变得更加强大。





使用 CI/CD 工具的 DevOps 流程如下所示。




您的本地主机中运行着CI/CD工具,但是目前您无能为力。让我们继续进行DevOps旅程的下一步。
步骤2:源代码管理


验证您的CI/CD工具是否可以执行某些操作的最佳方法(可能是最简单的方法)是与源代码管理管理(SCM)工具集成。为什么需要源代码控制?假设您正在开发应用程序。每当您构建应用程序时,您都在进行编程-无论您使用的是Java,Python,C ++,Go,Ruby,JavaScript还是任何种类繁多的编程语言。您编写的编程代码称为源代码。首先,尤其是当您独自工作时,可以将所有内容都放在本地目录中。但是,当项目规模扩大并且您邀请其他人进行协作时,您需要一种在有效共享代码修改的同时避免合并冲突的方法。您还需要一种方法来恢复以前的版本,并且使备份以及复制粘贴的过程变得陈旧。您(和您的队友)想要更好的东西。


这就是SCM几乎成为必需品的地方。SCM工具通过将代码存储在存储库中,对代码进行版本控制以及在项目成员之间进行协调来提供帮助。
尽管有很多SCM工具,但Git是标准的,这是正确的。我强烈建议使用Git,但如果您愿意,还有其他开源选项。





这是添加SCM后的DevOps管道的样子。







CI/CD工具可以自动执行签入和签出源代码以及跨成员协作的任务。不错?但是,您如何才能使其成为可以正常工作的应用程序,以便数十亿人可以使用和欣赏它?

步骤3:自动化构建工具


优秀的!您可以签出代码并将更改提交给版本控制系统,还可以邀请您的朋友在源代码控制系统中开发进行协作。但是您尚未构建应用程序。要使其成为Web应用程序,必须对其进行编译并将其设置为可部署的包格式或以可执行文件的形式运行。(请注意,不需要编译诸如JavaScript或PHP之类的解释型编程语言。)


输入构建自动化工具。无论您决定使用哪种构建工具,所有构建自动化工具都有一个共同的目标:将源代码构建为某种所需的格式,并使清理,编译,测试和部署到特定位置的任务自动化。根据您的编程语言,构建工具会有所不同,但是这里有一些常见的开源选项可供考虑。


太棒了!您可以将构建自动化工具配置文件放入源代码管理管理中,并让您的CI/CD工具对其进行构建。




一切都很好,对吗?但是,您可以在哪里部署它呢?
步骤4:Web应用程序服务器


到目前为止,您具有一个可执行或可部署的打包文件。为了使任何应用程序真正有用,它必须提供某种服务或接口,但是您需要一个容器来托管您的应用程序。


对于Web应用程序,Web应用程序服务器就是那个容器。应用服务器提供了一个环境,在该环境中,可检测可部署程序包内的编程逻辑,呈现接口并通过打开外部套接字来提供Web服务。您需要HTTP服务器以及其他环境(例如虚拟机)来安装应用程序服务器。现在,让我们假设您将沿途学习(尽管我将在下面讨论容器)。


有许多可用的开源Web应用程序服务器。


现在,DevOps管道几乎可用。做得好!





尽管可以在这里停下来自己进一步集成,但是代码质量对于应用程序开发人员来说是重要的。

步骤5:代码测试范围


实施代码测试块可能是另一个繁琐的要求,但是开发人员需要尽早发现应用程序中的任何错误并提高代码质量,以确保最终用户满意。幸运的是,有许多开源工具可用于测试您的代码并提出提高其质量的建议。更好的是,大多数CI/CD工具都可以插入这些工具中并使过程自动化。


代码测试包含两个部分:帮助编写和运行测试的代码测试框架,以及有助于提高代码质量的代码质量建议工具。


代码测试框架





代码质量建议工具





请注意,由于 C++ 和 C#是专有的编程语言(尽管GCC是开源的),因此上述大多数工具和框架都是为Java,Python和JavaScript编写的。


现在,您已经实现了代码测试覆盖率工具,您的DevOps管道应类似于本教程开头所示的DevOps管道图。

可选步骤

容器


如前所述,您可以将应用程序服务器托管在虚拟机或服务器上,但是容器是一种流行的解决方案。


什么是容器?简短的解释是,VM需要操作系统的巨大资源,这不但占用了应用程序的大小,而容器只需要一些库和配置即可运行应用程序。显然,VM仍然有重要的用途,但是容器是用于托管应用程序(包括应用程序服务器)的轻量级解决方案。


尽管容器还有其他选择,但是Docker和Kubernetes是最受欢迎的。




中间件自动化工具


我们的DevOps管道主要集中于协作构建和部署应用程序,但是您可以使用DevOps工具执行许多其他操作。其中之一是利用基础结构即代码(IaC)工具,也称为中间件自动化工具。这些工具有助于自动化中间件软件的安装,管理和其他任务。例如,自动化工具可以使用正确的配置提取应用程序(如Web应用程序服务器,数据库和监视工具),并将其部署到应用程序服务器。


以下是要考虑的几种开源中间件自动化工具:




总结


这只是完整的DevOps管道外观的冰山一角。首先从CI/CD工具开始,然后探索其他可以自动化的方法,以简化团队的工作。另外,请研究可帮助您的团队更好地合作的开源工具。(转自泽阳)





页: [1]
查看完整版本: 使用开源工具构建 DevOps 管道的初学者指南