DevOps已成为修复缓慢,断开连接或中断的软件开发流程的标准解决方案。问题是,如果您是DevOps的新手,并且不知道从哪里开始,那么您可能对这些技术缺乏了解。本文将引导您完成DevOps管道的定义,并提供有关如何创建五个步骤的说明。尽管本教程并不全面,但它应该为您提供基础,以帮助您入门和将来扩展知识。但是,让我们从历史开始。
我的DevOps旅程
我曾经在花旗集团(Citi Group)的云团队中工作,开发了基础架构即服务(IaaS)Web应用程序来管理花旗的云基础架构,但是我一直想知道如何使开发过程更高效,并为开发团队带来积极的文化变革。我在花旗云架构和基础架构CTO Greg Lavender推荐的书中找到了答案。这本书叫做《凤凰计划》,解释了DevOps原理,同时像小说一样阅读。
本书背面的表格显示了不同公司在发布环境中部署系统的频率:
亚马逊:每天23,000
谷歌:每天5,500
Netflix:每天500
Facebook:每天一次
Twitter:每周3次
典型公司:每9个月一次
亚马逊,谷歌和Netflix的频率如何可能?这是因为这些公司想出了如何创建近乎完美的DevOps管道。
直到在花旗实施DevOps之前,我们还有很长的路要走。那时我的团队拥有不同的环境,但是部署到开发服务器完全是手动的。所有开发人员只能访问一台基于IBM WebSphere Application Server社区版的开发服务器。问题在于,每当有多个用户尝试同时部署时,服务器就会关闭,因此开发人员必须彼此传达其意图,这非常痛苦。此外,还存在低级测试代码覆盖率,繁琐的手动部署过程以及无法跟踪与特定任务或用户故事相关的代码部署的问题。
我意识到我需要做点事情,并找到了一个志趣相投的同事。我们决定在最初的DevOps管道上进行协作-在我从事Jenkins,集成Atlassian Jira和BitBucket的工作期间,它设置了虚拟机和Tomcat应用服务器,并负责测试代码覆盖范围。这个辅助项目非常成功:我们几乎完全自动化了许多流程,实现了开发服务器几乎100%的正常运行时间,提供了跟踪并改善了测试代码的覆盖范围,还增加了将Git中的分支与Jira或部署中的问题链接的功能。我们用来构建DevOps管道的大多数工具都是开源的。
现在,我了解了DevOps管道的简单程度:我们没有使用Jenkins文件或Ansible之类的扩展名。但是,这个简单的管道运行良好,可能是由于帕累托原理(也称为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的开源工具,它是普及DevOps方向并成为事实上的标准的工具。
那么詹金斯是什么?可以将其视为一种神奇的通用遥控器,它可以通话并组织各种服务和工具。像Jenkins这样的CI / CD工具本身是无用的,但是随着它与各种工具和服务的连接,它变得更加强大。
Jenkins只是可用于构建DevOps管道的众多开源CI / CD工具之一。
詹金斯:知识共享和麻省理工学院
Travis CI:MIT
CruiseControl:BSD
Buildbot:GPL
Apache Gump:Apache 2.0
Cabie:GNU
这是使用CI / CD工具的DevOps流程的样子:
您已经在本地主机上运行了CI / CD工具,但是此时您无能为力。让我们继续进行DevOps旅程的下一站。
步骤2:管理源代码管理系统
测试您的CI / CD工具能否发挥作用的最佳(可能是最简单的)方法是与源代码控制工具(SCM)集成。为什么需要源代码控制?假设您正在开发应用程序。无论何时创建应用程序,您都在编程,而使用Java,Python,C ++,Go,Ruby,JavaScript或任何种类繁多的编程语言都没关系。您编写的代码称为源代码。首先,尤其是当您独自工作时,您可能可以将所有内容放在本地目录中。但是随着项目规模的扩大以及您邀请其他人进行协作,您需要一种在有效共享修改的同时防止冲突的方法。您还需要一种还原以前版本的方法,因为创建备份并复制/粘贴到备份中已经过时了。您(和您的队友)需要更好的东西。
在这里,实际上必须进行源代码控制。该工具将您的代码存储在存储库中,跟踪版本并协调项目参与者的工作。
尽管有许多源代码控制工具,但是Git是标准的,这是正确的。我强烈建议使用Git,但如果您愿意的话,还可以使用其他开源选项。
Git:GPLv2和LGPL v2.1子
版本:Apache 2.0
并行版本系统(CVS):GNU
Vesta:LGPL
Mercurial:GNU GPL v2 +
这是带有已添加源代码控件的DevOps管道的样子。
CI / CD工具可以使验证,源代码检索和成员之间的协作过程自动化。不错?但是,如何使它成为可以正常工作的应用程序,以便数十亿人可以使用和欣赏它?
步骤3:创建构建自动化工具
精细!您可以检查代码并更改源代码管理系统,也可以邀请您的朋友进行开发合作。但是您尚未创建该应用程序。要制作Web应用程序,必须以可部署的批处理格式对其进行编译和打包,或者以可执行文件的形式运行。(请注意,不需要编译诸如JavaScript或PHP之类的解释型编程语言。)
使用构建自动化工具。无论您选择使用哪种构建自动化工具,它们都有一个共同的目标:以所需的任何格式构建源代码,并自动执行清理,编译,测试和部署到特定环境的任务。构建工具将根据您的编程语言而有所不同,但是这里有一些常见的开源选项。
名称 | 执照 | 程式语言 |
---|---|---|
马文 | 阿帕奇2.0 | 爪哇 |
蚂蚁 | 阿帕奇2.0 | 爪哇 |
摇篮 | 阿帕奇2.0 | 爪哇 |
淡褐色 | 阿帕奇2.0 | 爪哇 |
使 | GNU | 不适用 |
咕unt声 | 麻省理工学院 | Java脚本 |
古尔普 | 麻省理工学院 | Java脚本 |
建造者 | 阿帕奇 | 红宝石 |
耙 | 麻省理工学院 | 红宝石 |
行动计划 | GNU | 蟒蛇 |
SCons | 麻省理工学院 | 蟒蛇 |
比特烘烤 | GPLv2 | 蟒蛇 |
蛋糕 | 麻省理工学院 | C # |
自卫队 | 外籍人士(MIT) | LISP |
阴谋 | BSD | 哈斯克尔 |
大!您可以将构建自动化工具配置文件放入源代码控制系统中,然后让您的CI / CD工具将所有内容组合在一起。
可以,不是吗?但是在哪里部署您的应用程序?
步骤4:Web应用程序服务器
到目前为止,您已经可以执行或安装压缩文件。为了使任何应用程序真正有用,它必须提供某种服务或接口,但是您需要一个容器来承载您的应用程序。
Web应用程序服务器就是这样的容器。服务器提供了一个环境,可以在其中定义已部署程序包的逻辑。该服务器还通过打开外部套接字来提供接口并提供Web服务。您需要HTTP服务器以及一些环境(例如虚拟机)来安装它。现在,让我们假设您了解更多有关此内容的信息(尽管我将在下面讨论容器)。
有几个开源Web应用程序服务器。
名称 | 执照 | 程式语言 |
---|---|---|
雄猫 | 阿帕奇2.0 | 爪哇 |
码头 | 阿帕奇2.0 | 爪哇 |
野蝇 | GNU小公众 | 爪哇 |
玻璃鱼 | CDDL和GNU较少公开 | 爪哇 |
Django的 | 3句BSD | 蟒蛇 |
龙卷风 | 阿帕奇2.0 | 蟒蛇 |
独角兽 | 麻省理工学院 | 蟒蛇 |
蟒蛇 | 麻省理工学院 | 蟒蛇 |
滑轨 | 麻省理工学院 | 红宝石 |
Node.js | 麻省理工学院 | Java脚本 |
您的DevOps管道几乎可以使用了。做得好!
尽管您可以停在那里并进行自我集成,但是代码质量对于应用程序开发人员来说是一件重要的事情。
步骤5:代码测试范围
实施测试可能是另一个繁琐的要求,但是开发人员必须尽早发现应用程序中的所有错误,并提高代码质量,以确保最终用户满意。幸运的是,有很多开源工具可以测试您的代码并提出建议以提高其质量。更好的是,大多数CI / CD工具都可以连接到这些工具并使过程自动化。
代码测试包括两部分:帮助您编写和运行测试的代码测试框架,以及有助于提高代码质量的建议工具。
代码测试系统
名称 | 执照 | 程式语言 |
---|---|---|
JUnit的 | Eclipse公共许可证 | 爪哇 |
EasyMock | 阿帕奇 | 爪哇 |
莫基托 | 麻省理工学院 | 爪哇 |
动力模拟 | 阿帕奇2.0 | 爪哇 |
pytest | 麻省理工学院 | 蟒蛇 |
假设 | Mozilla | 蟒蛇 |
毒物 | 麻省理工学院 | 蟒蛇 |
代码改进推荐系统
名称 | 执照 | 程式语言 |
---|---|---|
科贝图拉 | GNU | 爪哇 |
CodeCover | Eclipse Public(EPL) | 爪哇 |
Coverage.py | 阿帕奇2.0 | 蟒蛇 |
艾玛 | 通用公共许可证 | 爪哇 |
JaCoCo | Eclipse公共许可证 | 爪哇 |
假设 | Mozilla | 蟒蛇 |
毒物 | 麻省理工学院 | 蟒蛇 |
茉莉花 | 麻省理工学院 | Java脚本 |
业力 | 麻省理工学院 | Java脚本 |
摩卡咖啡 | 麻省理工学院 | Java脚本 |
笑话 | 麻省理工学院 | Java脚本 |
请注意,由于C ++和C#是专有的编程语言(尽管GCC是开源的),因此上面提到的大多数工具和框架都是为Java,Python和JavaScript编写的。
现在,您已经实现了测试覆盖率工具,您的DevOps管道应看起来类似于本教程开始时所示的图。
附加步骤
容器
正如我所说,您可以将服务器托管在虚拟机或服务器中,但是容器是一种流行的解决方案。
什么是容器?简短的解释是,虚拟机需要超过应用程序大小的大量操作系统内存,而容器只需要几个库和配置即可运行应用程序。显然,虚拟机仍有重要用途,但是容器是用于托管应用程序(包括应用程序服务器)的轻量级解决方案。
尽管存在其他容器选项,但最受欢迎的是Docker和Kubernetes。
Docker:Apache 2.0
Kubernetes:Apache 2.0 自动化中间件
我们的DevOps管道主要集中于应用程序的共同创建和部署,但是使用DevOps工具还可以完成许多其他事情。其中之一是使用基础结构即代码(IaC)工具,也称为中间件工具。这些工具有助于自动化中间件的安装,管理和其他任务。例如,自动化工具可以检索具有正确配置的应用程序,例如Web应用程序服务器,数据库和监视工具,并将它们部署到应用程序服务器。
以下是一些开源中间件工具:
Ansible:GNU Public
SaltStack:Apache 2.0
厨师:Apache 2.0
木偶:Apache或GPL
通过参加SkillFactory的付费在线课程,了解如何从头开始或获得技能和薪资水平提高的详细信息:
- DevOps课程(12个月)
更多课程
- Machine Learning (12 )
- Data Science (12 )
- (9 )
- «Python -» (9 )