本文共 4608 字,大约阅读时间需要 15 分钟。
devops 开源工具链
DevOps已成为修复缓慢,孤立或其他功能不正常的软件开发流程的默认答案。 但是,当您不熟悉DevOps并且不确定从哪里开始时,这并不意味着什么。 本文探讨了什么是DevOps管道,并提供了五步创建过程。 尽管本教程并不全面,但它应该为您提供基础,以供以后入门和扩展。 但是首先,是一个故事。
我曾经在花旗集团(Citi Group)的云团队工作,开发了基础架构即服务(IaaS)Web应用程序来管理花旗的云基础架构,但是我一直对寻找使开发流程更高效并带来更多收益的方法感兴趣。积极的文化变革给开发团队。 我在花旗集团云架构和基础设施工程首席技术官格雷格·拉文德(Greg Lavender)推荐的一本书找到了答案。 该书在解释DevOps原理时读起来像小说。
本书背面的表格显示了不同公司部署到发布环境的频率:
公司 | 部署频率 |
---|---|
Amazon | 每天23,000 |
每天5,500 | |
Netflix | 每天500 |
每天1次 | |
每周3 | |
Typical enterprise | 每9个月1个 |
亚马逊,谷歌和Netflix的频率速率怎么可能? 这是因为这些公司已经找到了如何制作接近完美的DevOps管道的方法。
在我们在花旗实施DevOps之前,情况肯定不是这样。 那时,我的团队拥有不同的暂存环境,但是部署到开发服务器的过程非常手动。 所有开发人员都只能访问一台基于IBM WebSphere Application Server Community Edition的开发服务器。 问题在于,每当多个用户同时尝试进行部署时,服务器就会关闭,因此开发人员必须在要进行部署的时候互相告知对方,这很痛苦。 此外,还存在代码测试覆盖率低,手动部署过程繁琐以及无法通过定义的任务或用户故事来跟踪代码部署的问题。
现在,我意识到我们的DevOps管道非常初级,因为我们没有利用Jenkins文件或Ansible等高级配置。 但是,这个简单的过程效果很好,可能是由于原则(也称为80/20规则)。
如果您问几个人:“什么是DevOps?您可能会得到几个不同的答案。像敏捷一样,DevOps已经演变为涵盖许多不同的学科,但是大多数人会在以下几件事上达成共识:DevOps是一种软件开发实践或软件开发生命周期(SDLC)的中心宗旨是文化变革,开发人员和非开发人员都在这样的环境中工作:以前的手动操作是自动化的;每个人都尽其所能;每个时期的部署数量增加;吞吐量增加;灵活性提高。
虽然拥有正确的软件工具并不是实现DevOps环境的唯一条件,但某些工具是必需的。 关键之一是持续集成和持续部署(CI / CD)。 该管道是环境处于不同阶段(例如DEV,INT,TST,QA,UAT,STG,PROD)的地方,手动操作是自动化的,开发人员可以实现高质量的代码,灵活性和大量部署。
本文介绍了一种使用开放源代码工具创建DevOps管道的五步方法,如下图所示。
事不宜迟,让我们开始吧。
您需要的第一件事是CI / CD工具。 Jenkins是基于MIT许可证的,基于Java的开源CI / CD工具,它是使DevOps运动普及并已成为事实上的标准的工具。
那么,詹金斯是什么? 可以将其想象为一种神奇的通用遥控器,它可以与许多不同的服务和工具进行通信并进行编排。 像Jenkins这样的CI / CD工具本身没有用,但是随着它插入不同的工具和服务,它变得更加强大。
Jenkins只是可用来构建DevOps管道的众多开源CI / CD工具之一。
名称 | 执照 |
---|---|
知识共享和麻省理工学院 | |
麻省理工学院 | |
BSD | |
GPL | |
阿帕奇2.0 | |
GNU |
使用CI / CD工具的DevOps流程如下所示。
您已经在本地主机中运行了CI / CD工具,但是目前您无能为力。 让我们继续进行DevOps旅程的下一步。
验证您的CI / CD工具是否可以执行某些操作的最佳方法(可能是最简单的方法)是与源代码管理管理(SCM)工具集成。 为什么需要源代码控制? 假设您正在开发应用程序。 每当您构建应用程序时,您都在进行编程-无论您使用的是Java,Python,C ++,Go,Ruby,JavaScript还是其他种类繁多的编程语言。 您编写的编程代码称为源代码。 首先,尤其是当您独自工作时,可以将所有内容都放在本地目录中。 但是,当项目规模扩大并邀请其他人进行协作时,您需要一种在有效共享代码修改的同时避免合并冲突的方法。 您还需要一种恢复以前版本的方法,并且使备份以及复制粘贴的过程变得陈旧。 您(和您的队友)想要更好的东西。
这就是SCM几乎成为必需品的地方。 SCM工具通过将代码存储在存储库中,对代码进行版本控制以及在项目成员之间进行协调来提供帮助。
尽管有很多SCM工具,但Git是标准的,这是正确的。 我强烈建议使用Git,但是如果您愿意,还有其他开源选项。
名称 | 执照 |
---|---|
GPLv2和LGPL v2.1 | |
阿帕奇2.0 | |
(CVS) | GNU |
LGPL | |
GNU GPL v2 + |
添加SCM后,DevOps管道的外观如下所示。
CI / CD工具可以自动执行检入和检出源代码以及跨成员协作的任务。 不错? 但是,您如何才能使其成为可以正常工作的应用程序,以便数十亿人可以使用和欣赏它?
优秀的! 您可以签出代码并将更改提交给源控件,也可以邀请朋友在源控件开发上进行协作。 但是您尚未构建应用程序。 要使其成为Web应用程序,必须对其进行编译并将其设置为可部署的包格式或以可执行文件的形式运行。 (请注意,不需要编译诸如JavaScript或PHP之类的解释型编程语言。)
输入构建自动化工具。 无论您决定使用哪种构建工具,所有构建自动化工具都有一个共同的目标:将源代码构建为某种所需格式,并使清理,编译,测试和部署到特定位置的任务自动化。 构建工具将根据您的编程语言而有所不同,但是这里有一些常用的开源选项可供考虑。
名称 | 执照 | 程式语言 |
---|---|---|
阿帕奇2.0 | Java | |
阿帕奇2.0 | Java | |
阿帕奇2.0 | Java | |
阿帕奇2.0 | Java | |
GNU | 不适用 | |
麻省理工学院 | JavaScript | |
麻省理工学院 | JavaScript | |
阿帕奇 | Ruby | |
麻省理工学院 | Ruby | |
GNU | Python | |
麻省理工学院 | Python | |
GPLv2 | Python | |
麻省理工学院 | C# | |
外籍人士(MIT) | LISP | |
BSD | 哈斯克尔 |
太棒了! 您可以将构建自动化工具配置文件放入源代码管理管理中,并让您的CI / CD工具对其进行构建。
一切都很好,对吧? 但是您可以在哪里部署它呢?
到目前为止,您已经具有可执行或可部署的打包文件。 为了使任何应用程序真正有用,它必须提供某种服务或接口,但是您需要一个容器来托管您的应用程序。
对于Web应用程序,Web应用程序服务器就是那个容器。 应用程序服务器提供了一个环境,在该环境中,可检测可部署程序包中的编程逻辑,呈现接口并通过打开外部套接字来提供Web服务。 您需要HTTP服务器以及其他环境(例如虚拟机)来安装应用程序服务器。 现在,让我们假设您将沿途学习(尽管我将在下面讨论容器)。
有许多可用的开源Web应用程序服务器。
名称 | 执照 | 程式语言 |
---|---|---|
阿帕奇2.0 | Java | |
阿帕奇2.0 | Java | |
GNU小公众 | Java | |
CDDL和GNU较少公开 | Java | |
3句BSD | Python | |
阿帕奇2.0 | Python | |
麻省理工学院 | Python | |
麻省理工学院 | Python | |
麻省理工学院 | Ruby | |
麻省理工学院 | Java脚本 |
现在,DevOps管道几乎可用。 做得好!
尽管可以在这里停下来自己进一步集成,但是代码质量对于应用程序开发人员来说是重要的。
实施代码测试块可能是另一个繁琐的要求,但是开发人员需要尽早发现应用程序中的任何错误并提高代码质量,以确保最终用户满意。 幸运的是,有许多开源工具可用来测试您的代码并提出提高其质量的建议。 更好的是,大多数CI / CD工具都可以插入这些工具中并使过程自动化。
代码测试由两部分组成:帮助编写和运行测试的代码测试框架 ,以及有助于提高代码质量的代码质量建议工具 。
名称 | 执照 | 程式语言 |
---|---|---|
Eclipse公共许可证 | Java | |
阿帕奇 | Java | |
麻省理工学院 | Java | |
阿帕奇2.0 | Java | |
麻省理工学院 | Python | |
Mozilla | Python | |
麻省理工学院 | Python |
名称 | 执照 | 程式语言 |
---|---|---|
GNU | Java | |
Eclipse Public(EPL) | Java | |
阿帕奇2.0 | Python | |
通用公共许可证 | Java | |
Eclipse公共许可证 | Java | |
Mozilla | Python | |
麻省理工学院 | Python | |
麻省理工学院 | JavaScript | |
麻省理工学院 | JavaScript | |
麻省理工学院 | JavaScript | |
麻省理工学院 | JavaScript |
请注意,由于C ++和C#是专有的编程语言(尽管GCC是开源的),因此上述大多数工具和框架都是为Java,Python和JavaScript编写的。
现在,您已经实现了代码测试覆盖率工具,您的DevOps管道应类似于本教程开头所示的DevOps管道图。
如前所述,您可以将应用程序服务器托管在虚拟机或服务器上,但是容器是一种流行的解决方案。
? 简短的解释是,VM需要操作系统的巨大资源,这不堪应用程序的大小,而容器只需要一些库和配置即可运行应用程序。 显然,VM仍然有重要的用途,但是容器是用于托管应用程序(包括应用程序服务器)的轻量级解决方案。
尽管容器还有其他选择,但是Docker和Kubernetes是最受欢迎的。
名称 | 执照 |
---|---|
阿帕奇2.0 | |
阿帕奇2.0 |
要了解更多信息,请查看其他有关Docker和Kubernetes的文章:
我们的DevOps管道主要侧重于协作构建和部署应用程序,但是您可以使用DevOps工具执行许多其他操作。 其中之一是利用基础结构即代码(IaC)工具,也称为中间件自动化工具。 这些工具有助于自动化中间件软件的安装,管理和其他任务。 例如,自动化工具可以使用正确的配置提取应用程序(如Web应用程序服务器,数据库和监视工具),并将其部署到应用程序服务器。
以下是要考虑的几种开源中间件自动化工具:
名称 | 执照 |
---|---|
GNU公共 | |
阿帕奇2.0 | |
阿帕奇2.0 | |
Apache或GPL |
有关中间件自动化工具的更多信息,请查看以下其他文章:
这只是完整的DevOps管道外观的冰山一角。 首先从CI / CD工具开始,然后探索还可以自动化的其他什么,以简化团队的工作。 另外,请研究可帮助您的团队更好地合作的 。
为了获得更多见解,这里有一些关于DevOps的很好的入门文章:
将DevOps与开源敏捷工具集成也是一个好主意:
翻译自:
devops 开源工具链
转载地址:http://mmczd.baihongyu.com/