devops 开源工具链_使用开源工具构建DevOps管道的初学者指南
devops 开源工具链
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等高级配置。 但是,这个简单的过程效果很好,可能是由于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这样的CI / CD工具本身没有用,但是随着它插入不同的工具和服务,它变得更加强大。
Jenkins只是可用来构建DevOps管道的众多开源CI / CD工具之一。
名称 | 执照 |
---|---|
Jenkins | 知识共享和麻省理工学院 |
Travis CI | 麻省理工学院 |
CruiseControl | BSD |
Buildbot | GPL |
Apache Gump | 阿帕奇2.0 |
Cabie | GNU |
使用CI / CD工具的DevOps流程如下所示。
您已经在本地主机中运行了CI / CD工具,但是目前您无能为力。 让我们继续进行DevOps旅程的下一步。
步骤2:源代码管理管理
验证您的CI / CD工具是否可以执行某些操作的最佳方法(可能是最简单的方法)是与源代码管理管理(SCM)工具集成。 为什么需要源代码控制? 假设您正在开发应用程序。 每当您构建应用程序时,您都在进行编程-无论您使用的是Java,Python,C ++,Go,Ruby,JavaScript还是其他种类繁多的编程语言。 您编写的编程代码称为源代码。 首先,尤其是当您独自工作时,可以将所有内容都放在本地目录中。 但是,当项目规模扩大并邀请其他人进行协作时,您需要一种在有效共享代码修改的同时避免合并冲突的方法。 您还需要一种恢复以前版本的方法,并且使备份以及复制粘贴的过程变得陈旧。 您(和您的队友)想要更好的东西。
这就是SCM几乎成为必需品的地方。 SCM工具通过将代码存储在存储库中,对代码进行版本控制以及在项目成员之间进行协调来提供帮助。
尽管有很多SCM工具,但Git是标准的,这是正确的。 我强烈建议使用Git,但是如果您愿意,还有其他开源选项。
名称 | 执照 |
---|---|
Git | GPLv2和LGPL v2.1 |
Subversion | 阿帕奇2.0 |
Concurrent Versions System (CVS) | GNU |
Vesta | LGPL |
Mercurial | GNU GPL v2 + |
添加SCM后,DevOps管道的外观如下所示。
CI / CD工具可以自动执行检入和检出源代码以及跨成员协作的任务。 不错? 但是,您如何才能使其成为可以正常工作的应用程序,以便数十亿人可以使用和欣赏它?
步骤3:建立自动化工具
优秀的! 您可以签出代码并将更改提交给源控件,也可以邀请朋友在源控件开发上进行协作。 但是您尚未构建应用程序。 要使其成为Web应用程序,必须对其进行编译并将其设置为可部署的包格式或以可执行文件的形式运行。 (请注意,不需要编译诸如JavaScript或PHP之类的解释型编程语言。)
输入构建自动化工具。 无论您决定使用哪种构建工具,所有构建自动化工具都有一个共同的目标:将源代码构建为某种所需格式,并使清理,编译,测试和部署到特定位置的任务自动化。 构建工具将根据您的编程语言而有所不同,但是这里有一些常用的开源选项可供考虑。
名称 | 执照 | 程式语言 |
---|---|---|
Maven | 阿帕奇2.0 | Java |
Ant | 阿帕奇2.0 | Java |
Gradle | 阿帕奇2.0 | Java |
Bazel | 阿帕奇2.0 | Java |
Make | GNU | 不适用 |
Grunt | 麻省理工学院 | JavaScript |
Gulp | 麻省理工学院 | JavaScript |
Buildr | 阿帕奇 | Ruby |
Rake | 麻省理工学院 | Ruby |
A-A-P | GNU | Python |
SCons | 麻省理工学院 | Python |
BitBake | GPLv2 | Python |
Cake | 麻省理工学院 | C# |
ASDF | 外籍人士(MIT) | LISP |
Cabal | BSD | 哈斯克尔 |
太棒了! 您可以将构建自动化工具配置文件放入源代码管理管理中,并让您的CI / CD工具对其进行构建。
一切都很好,对吧? 但是您可以在哪里部署它呢?
步骤4:Web应用程序服务器
到目前为止,您已经具有可执行或可部署的打包文件。 为了使任何应用程序真正有用,它必须提供某种服务或接口,但是您需要一个容器来托管您的应用程序。
对于Web应用程序,Web应用程序服务器就是那个容器。 应用程序服务器提供了一个环境,在该环境中,可检测可部署程序包中的编程逻辑,呈现接口并通过打开外部套接字来提供Web服务。 您需要HTTP服务器以及其他环境(例如虚拟机)来安装应用程序服务器。 现在,让我们假设您将沿途学习(尽管我将在下面讨论容器)。
有许多可用的开源Web应用程序服务器。
名称 | 执照 | 程式语言 |
---|---|---|
Tomcat | 阿帕奇2.0 | Java |
Jetty | 阿帕奇2.0 | Java |
WildFly | GNU小公众 | Java |
GlassFish | CDDL和GNU较少公开 | Java |
Django | 3句BSD | Python |
Tornado | 阿帕奇2.0 | Python |
Gunicorn | 麻省理工学院 | Python |
Python Paste | 麻省理工学院 | Python |
Rails | 麻省理工学院 | Ruby |
Node.js | 麻省理工学院 | Java脚本 |
现在,DevOps管道几乎可用。 做得好!
尽管可以在这里停下来自己进一步集成,但是代码质量对于应用程序开发人员来说是重要的。
步骤5:代码测试范围
实施代码测试块可能是另一个繁琐的要求,但是开发人员需要尽早发现应用程序中的任何错误并提高代码质量,以确保最终用户满意。 幸运的是,有许多开源工具可用来测试您的代码并提出提高其质量的建议。 更好的是,大多数CI / CD工具都可以插入这些工具中并使过程自动化。
代码测试由两部分组成:帮助编写和运行测试的代码测试框架 ,以及有助于提高代码质量的代码质量建议工具 。
代码测试框架
名称 | 执照 | 程式语言 |
---|---|---|
JUnit | Eclipse公共许可证 | Java |
EasyMock | 阿帕奇 | Java |
Mockito | 麻省理工学院 | Java |
PowerMock | 阿帕奇2.0 | Java |
Pytest | 麻省理工学院 | Python |
Hypothesis | Mozilla | Python |
Tox | 麻省理工学院 | Python |
代码质量建议工具
名称 | 执照 | 程式语言 |
---|---|---|
Cobertura | GNU | Java |
CodeCover | Eclipse Public(EPL) | Java |
Coverage.py | 阿帕奇2.0 | Python |
Emma | 通用公共许可证 | Java |
JaCoCo | Eclipse公共许可证 | Java |
Hypothesis | Mozilla | Python |
Tox | 麻省理工学院 | Python |
Jasmine | 麻省理工学院 | JavaScript |
Karma | 麻省理工学院 | JavaScript |
Mocha | 麻省理工学院 | JavaScript |
Jest | 麻省理工学院 | JavaScript |
请注意,由于C ++和C#是专有的编程语言(尽管GCC是开源的),因此上述大多数工具和框架都是为Java,Python和JavaScript编写的。
现在,您已经实现了代码测试覆盖率工具,您的DevOps管道应类似于本教程开头所示的DevOps管道图。
可选步骤
货柜
如前所述,您可以将应用程序服务器托管在虚拟机或服务器上,但是容器是一种流行的解决方案。
什么是 容器 ? 简短的解释是,VM需要操作系统的巨大资源,这不堪应用程序的大小,而容器只需要一些库和配置即可运行应用程序。 显然,VM仍然有重要的用途,但是容器是用于托管应用程序(包括应用程序服务器)的轻量级解决方案。
尽管容器还有其他选择,但是Docker和Kubernetes是最受欢迎的。
名称 | 执照 |
---|---|
Docker | 阿帕奇2.0 |
Kubernetes | 阿帕奇2.0 |
要了解更多信息,请查看其他有关Docker和Kubernetes的Opensource.com文章:
- 什么是Docker?
- Docker简介
- 什么是Kubernetes?
- 从0到Kubernetes
中间件自动化工具
我们的DevOps管道主要侧重于协作构建和部署应用程序,但是您可以使用DevOps工具执行许多其他操作。 其中之一是利用基础结构即代码(IaC)工具,也称为中间件自动化工具。 这些工具有助于自动化中间件软件的安装,管理和其他任务。 例如,自动化工具可以使用正确的配置提取应用程序(如Web应用程序服务器,数据库和监视工具),并将其部署到应用程序服务器。
以下是要考虑的几种开源中间件自动化工具:
名称 | 执照 |
---|---|
Ansible | GNU公共 |
SaltStack | 阿帕奇2.0 |
Chef | 阿帕奇2.0 |
Puppet | Apache或GPL |
有关中间件自动化工具的更多信息,请查看以下其他Opensource.com文章:
- Ansible快速入门指南
- 使用Ansible自动化部署策略
- 前5个配置管理工具
你可以从这里去哪里?
这只是完整的DevOps管道外观的冰山一角。 首先从CI / CD工具开始,然后探索还可以自动化的其他什么,以简化团队的工作。 另外,请研究可帮助您的团队更好地合作的开源通信工具 。
为了获得更多见解,这里有一些关于DevOps的很好的入门文章:
- 什么是DevOps
- 成为DevOps工程师要掌握的5件事
- DevOps适合所有人
- DevOps中的预测分析入门
将DevOps与开源敏捷工具集成也是一个好主意:
- 什么是敏捷?
- 成为出色的敏捷开发人员的4个步骤
翻译自: https://opensource.com/article/19/4/devops-pipeline
devops 开源工具链
devops 开源工具链_使用开源工具构建DevOps管道的初学者指南相关推荐
- 使用开源工具构建DevOps管道的初学者指南
DevOps已成为修复缓慢,孤立或不正常运行的软件开发流程的默认答案.但是,当您不熟悉DevOps并且不确定从哪里开始时,这并不意味着什么.本文探讨了什么是DevOps管道,并提供了五步创建过程.虽然 ...
- 开源 区块链_区块链将如何影响开源
开源 区块链 中本聪(Satoshi Nakamoto)十年前以比特币起家的时候,已经找到了很多追随者,并成为去中心化运动. 对于某些人来说,区块链技术是一种宗教,它将对人类产生与互联网相同的影响. ...
- 开源 区块链_区块链如何补充开源
开源 区块链 大教堂和集市是一个经典的开源故事,由Eric Steven Raymond于20年前撰写. 在故事中,埃里克(Eric)描述了一种新的革命性软件开发模型,该模型在没有(或很少有)中央管理 ...
- 开源硬件 专利_与开源思想领袖的专利巨魔和开放文档格式
开源硬件 专利 在高登·哈夫(Gordon Haff)的博客上,红帽的高级云推广员Connections与开放源代码计划总裁西蒙·菲普斯 ( Simon Phipps)谈及了美国软件专利案以及英国决定 ...
- node.js是开源的吗_为开源做贡献并不难:我为Node.js项目做贡献的旅程
node.js是开源的吗 As a developer, you should consider contributing to open source software. Many of your ...
- 阿里开源java调试_阿里开源java诊断工具Arthas
快速安装 使用as.sh Arthas 支持在 Linux/Unix/Mac 等平台上一键安装,请复制以下内容,并粘贴到命令行中,敲 回车 执行即可: curl -L https://alibaba. ...
- 开源管理项目管理_避免开源项目管理中的不良做法
开源管理项目管理 在奥斯汀的OpenStack峰会期间,我有机会与一些人谈论了我在运行开源项目方面的经验. 事实证明,在社区中闲逛并为许多项目做出了多年贡献之后,我也许可以为许多新手提供一些后见之明和 ...
- 开源软件使用_消费开源软件:如何使用和购买
开源软件使用 供应商和原始设备制造商 (OEM)以及他们的IT客户,政府和学者都在使用,购买和制作开源软件,并且常常同时进行这三项活动. 这是考虑一个人与开源软件项目的关系的好方法. 关于开源软件项目 ...
- python开源项目贡献_为开源项目做出第一笔贡献
python开源项目贡献 一个常见的误解是,为开源做出贡献是困难的. 您可能会想:"有时候我什至不了解自己的代码:我应该如何理解别人的代码?" 放松. 直到去年,我还是这么想. 阅 ...
最新文章
- 【Linux】Linux computer文件夹下各种文件的作用
- 数据告诉你史上最年轻35000分先生到底有多强?
- linux网络编程之并发服务器的三种实现模型 (超级经典)
- 费马大定理,集惊险与武侠于一体
- java.sql 拒绝连接_hive jdbc 拒绝连接问题
- 如何使用异步Servlet来提高性能
- LeetCode 1878. 矩阵中最大的三个菱形和(模拟)
- python正则表达式提取字符串的字母_Python正则表达式提取一部分字符串
- pyqt5快速开发与实战_用云开发快速制作客户业务需求收集小程序丨实战
- php正弦函数图像,Go语言输出正弦函数(Sin)图像
- 通过PXE网络启动WinPE的方法
- layui官方文档保存
- JN5169 NXP ZigBee PRO 无线网络应用所需的常见操作(二)
- 视比特“AI+3D视觉”核心产品 | 智能下料分拣产线
- 前端工程师的摸鱼日常(13)
- 关于浏览器核心的一些思考
- 朴素贝叶斯代码实现python
- 使用mybatis plus时传入中文时出现乱码
- 微软进军杀毒软件市场
- 淘客是什么 淘客怎么做