初学者指南:创建 DevOps 管道

如果您是 DevOps 新手,请查看此创建第一个管道的五步指南。

初学者指南:创建 DevOps 管道

DevOps 已成为修复缓慢、脱节或损坏的软件开发流程的标准解决方案。 问题是,如果您是 DevOps 新手并且不知道从哪里开始,您可能缺乏对这些技术的理解。 本文将讨论 DevOps 管道的定义,并将提供创建 DevOps 管道的五个步骤说明。 虽然本教程并不详尽,但它应该为您开始您的旅程并在未来扩展您的知识奠定基础。 但让我们从历史开始吧。

我的 DevOps 之旅

我之前曾在花旗集团云团队工作,开发基础设施即服务 (IaaS) Web 应用程序来管理花旗的云基础设施,但我一直对如何提高开发流程的效率并为企业带来积极的文化变革感兴趣。开发团队。 我在花旗云架构和基础设施首席技术官 Greg Lavender 推荐的一本书中找到了答案。 这本书的名字叫《凤凰计划》(凤凰计划),并且解释了 DevOps 的原理,但读起来就像一本小说。

书后的表格显示了不同公司在发布环境中部署其系统的频率:

亚马逊:每天 23 个
谷歌:每天 5
Netflix:每天 500
脸书:每天一次
推特:每周3次
典型公司:每 9 个月一次

亚马逊、谷歌和 Netflix 的频率怎么可能呢? 这是因为这些公司已经弄清楚如何创建近乎完美的 DevOps 管道。

在我们在花旗实施 DevOps 之前,我们离这个目标还很远。 当时,我的团队有不同的环境,但开发服务器上的部署完全是手动的。 所有开发人员只能访问一台基于 IBM WebSphere Application Server Community Edition 的开发服务器。 问题是,每当多个用户尝试同时部署时,服务器就会关闭,因此开发人员必须相互传达他们的意图,这是相当痛苦的。 此外,还存在低级别测试代码覆盖率、繁琐的手动部署流程以及无法跟踪与特定任务或用户故事相关的代码部署等问题。

我意识到需要做点什么,并找到了一位志同道合的同事。 我们决定合作构建最初的 DevOps 管道 - 他设置了 Tomcat 虚拟机和应用程序服务器,而我则负责 Jenkins、集成 Atlassian Jira 和 BitBucket,并负责测试代码覆盖率。 这个副项目非常成功:我们几乎完全自动化了许多流程,在我们的开发服务器上实现了几乎 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 是一款基于 Java 并获得 MIT 许可的开源工具,是普及 DevOps 并成为事实上的标准的工具。

那么詹金斯是什么? 将其视为某种神奇的通用遥控器,可以与各种服务和工具进行通信并组织各种服务和工具。 就其本身而言,像 Jenkins 这样的 CI/CD 工具是无用的,但当它连接到不同的工具和服务时,它会变得更加强大。

Jenkins 只是可用于构建 DevOps 管道的众多开源 CI/CD 工具之一。

詹金斯:知识共享和麻省理工学院
特拉维斯 CI:麻省理工学院
巡航控制:BSD
构建机器人:GPL
阿帕奇阿甘:阿帕奇 2.0
卡比:GNU

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

初学者指南:创建 DevOps 管道

您的本地主机上运行着一个 CI/CD 工具,但目前您无能为力。 让我们进入 DevOps 之旅的下一阶段。

第 2 步:管理源代码控制系统

验证 CI/CD 工具能否发挥其魔力的最佳(也许是最简单)方法是与源代码控制 (SCM) 工具集成。 为什么需要源代码控制? 假设您正在开发一个应用程序。 每当您创建应用程序时,您都在编程,无论您使用 Java、Python、C++、Go、Ruby、JavaScript 还是无数种编程语言中的任何一种,都没有关系。 您编写的代码称为源代码。 一开始,尤其是当您独自工作时,将所有内容都放在本地目录中可能是可以的。 但随着项目变得越来越大并且您邀请其他人进行协作,您需要一种方法来防止冲突,同时有效地共享修改。 您还需要一种方法来恢复以前的版本,因为创建备份和复制/粘贴到它们中已经过时了。 你(和你的队友)需要更好的东西。

这就是源代码控制几乎成为必需的地方。 该工具将您的代码存储在存储库中、跟踪版本并协调项目参与者的工作。

虽然有很多源代码控制工具,但 Git 是标准,这是理所当然的。 我强烈建议使用 Git,不过如果您愿意,还有其他开源选项。

Git:GPLv2 和 LGPL v2.1
颠覆:阿帕奇2.0
并发版本系统 (CVS):GNU
灶神星:LGPL
Mercurial:GNU GPL v2+

这就是添加了源代码控制的 DevOps 管道的样子。

初学者指南:创建 DevOps 管道

CI/CD 工具可以自动化审查、源代码获取和成员之间协作的过程。 不错? 但如何将其变成一个可用的应用程序,以便数十亿人可以使用和欣赏它呢?

第 3 步:创建构建自动化工具

伟大的! 您可以审查代码并对源代码管理进行更改,并邀请您的朋友协作开发。 但您还没有创建应用程序。 要制作 Web 应用程序,必须将其编译并打包为可部署的批处理格式或作为可执行文件运行。 (请注意,解释型编程语言(例如 JavaScript 或 PHP)不需要编译)。

使用构建自动化工具。 无论您决定使用哪种构建自动化工具,它们都有相同的目标:将源代码构建为某种所需的格式,并自动执行清理、编译、测试和部署到特定环境的任务。 构建工具会根据您的编程语言而有所不同,但这里有一些常见的开源选项。

名称
许可证
程式语言

Maven的
阿帕奇2.0
爪哇岛

蚂蚁
阿帕奇2.0
爪哇岛

摇篮
阿帕奇2.0
爪哇岛

巴泽尔
阿帕奇2.0
爪哇岛

他们成为
GNU

咕噜
麻省理工学院简介
JavaScript的


麻省理工学院简介
JavaScript的

建造者
阿帕奇
红宝石


麻省理工学院简介
红宝石

美联社
GNU
蟒蛇

SCCons
麻省理工学院简介
蟒蛇

比特烘焙
GPLv2
蟒蛇

蛋糕
麻省理工学院简介
C#

自卫队
外籍人士(麻省理工学院)
LISP

阴谋
BSD
哈斯克尔

伟大的! 您可以将构建自动化工具配置文件放入源代码控制系统中,并让 CI/CD 工具将所有内容放在一起。

初学者指南:创建 DevOps 管道

一切都很好,不是吗? 但是在哪里部署您的应用程序呢?

第 4 步:Web 应用程序服务器

现在,您已经有了一个可执行或可安装的打包文件。 对于任何真正有用的应用程序,它必须提供某种服务或接口,但您需要一个容器来托管您的应用程序。

Web应用服务器就是这样一个容器。 服务器提供了一个可以定义正在部署的包的逻辑的环境。 服务器还提供接口,并通过向外界公开套接字来提供 Web 服务。 您需要一个 HTTP 服务器,以及一些环境(如虚拟机)来安装它。 现在,我们假设您将了解更多相关内容(尽管我将在下面介绍容器)。

有多种开源 Web 应用程序服务器。

名称
许可证
程式语言

Tomcat的
阿帕奇2.0
爪哇岛

码头
阿帕奇2.0
爪哇岛

WildFly
GNU 小公共
爪哇岛

玻璃鱼
CDDL 和 GNU 较少公开
爪哇岛

Django的
3 条款 BSD
蟒蛇

Tornado
阿帕奇2.0
蟒蛇

Gunicorn
麻省理工学院简介
蟒蛇

蟒蛇
麻省理工学院简介
蟒蛇


麻省理工学院简介
红宝石

Node.js的
麻省理工学院简介
使用Javascript

您的 DevOps 管道几乎可以使用了。 好工作!

初学者指南:创建 DevOps 管道

虽然您可以停下来自行处理集成,但代码质量是应用程序开发人员需要担心的重要问题。

第 5 步:代码测试覆盖率

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

代码测试由两部分组成:帮助您编写和运行测试的代码测试框架,以及帮助您提高代码质量的建议工具。

代码测试系统

名称
许可证
程式语言

JUnit的
Eclipse公共许可证
爪哇岛

易模
阿帕奇
爪哇岛

莫基托
麻省理工学院简介
爪哇岛

电源模拟
阿帕奇2.0
爪哇岛

pytest
麻省理工学院简介
蟒蛇

假说
Mozilla的
蟒蛇

毒物
麻省理工学院简介
蟒蛇

用于代码改进的推荐系统

名称
许可证
程式语言

覆盖
GNU
爪哇岛

代码封面
Eclipse 公共 (EPL)
爪哇岛

覆盖率.py
阿帕奇2.0
蟒蛇

艾玛
通用公共许可证
爪哇岛

可可
Eclipse公共许可证
爪哇岛

假说
Mozilla的
蟒蛇

毒物
麻省理工学院简介
蟒蛇

Jasmine
麻省理工学院简介
JavaScript的

因果报应
麻省理工学院简介
JavaScript的

摩卡
麻省理工学院简介
JavaScript的


麻省理工学院简介
JavaScript的

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

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

附加步骤

集装箱

正如我所说,您可以将服务器托管在虚拟机或服务器上,但容器是一种流行的解决方案。

什么是容器? 简而言之,虚拟机需要大量的操作系统内存,超过应用程序的大小,而容器只需要少量的库和配置来运行应用程序。 显然,虚拟机仍然有重要的用途,但容器是托管应用程序(包括应用程序服务器)的轻量级解决方案。

虽然还有其他容器选项,但最流行的是 Docker 和 Kubernetes。

码头工人:阿帕奇2.0
Kubernetes:阿帕奇 2.0

中级自动化工具

我们的 DevOps 管道主要专注于协作应用程序创建和部署,但使用 DevOps 工具还可以完成许多其他事情。 其中之一是使用基础设施即代码(IaC)工具,也称为中间件自动化工具。 这些工具有助于自动化中间件的安装、管理和其他任务。 例如,自动化工具可以使用正确的配置提取 Web 应用程序服务器、数据库和监控工具等应用程序,并将它们部署到应用程序服务器。

以下是一些开源中间件自动化工具:

Ansible:GNU 公共
SaltStack:Apache 2.0
厨师:阿帕奇2.0
傀儡:Apache 或 GPL

初学者指南:创建 DevOps 管道

了解如何通过参加 SkillFactory 的付费在线课程从头开始获得受欢迎的职业或在技能和薪水方面升级:

更多课程

有用

来源: habr.com

添加评论