使用开源工具构建DevOps管道的初学者指南
DevOps已成为修复缓慢,孤立或不正常运行的软件开发流程的默认答案。但是,当您不熟悉DevOps并且不确定从哪里开始时,这并不意味着什么。本文探讨了什么是DevOps管道,并提供了五步创建过程。虽然本教程并不全面,但它应该为您提供基础,以供以后入门和扩展。但是首先,是一个故事。
我的DevOps旅程
我曾经在云团队工作,开发了基础架构即服务(IaaS)Web应用程序来管理云基础架构,但是我一直对找出使开发流程更高效并带来更多收益的方法感兴趣。给开发团队带来积极的文化变革。我在云架构和基础架构工程首席技术官格雷格·拉文德(Greg Lavender)推荐的一本书*《凤凰计划》中*找到了答案。该书在解释DevOps原理时读起来像小说。
本书背面的表格显示了不同公司部署到发布环境的频率:
公司 | 部署频率 |
---|---|
Amazon | 每天23,000次 |
每天5,500次 | |
Netflix | 每天500次 |
每天1次 | |
每周3次 | |
其他企业 | 每9个月1次 |
亚马逊,谷歌和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工具是没有用的,但是随着它集成不同的工具和服务,它变得更加强大。
Jenkins只是您可以用来构建DevOps管道的众多开源CI/CD工具之一。
名称 | 执照 |
---|---|
Jenkins | 知识共享和麻省理工学院 |
Travis | 麻省理工学院 |
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](http://www.vestasys.org/) | 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 |
gruntjs | 麻省理工学院 | JavaScript |
gulpjs | 麻省理工学院 | JavaScript |
太棒了!您可以将构建自动化工具配置文件放入源代码管理管理中,并让您的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 | BSD | Python |
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 |
JaCoCo | Eclipse公共许可证 | Java |
Coverage.py | Apache 2.0 | Python |
请注意,由于C ++和C#是专有的编程语言(尽管GCC是开源的),因此上述大多数工具和框架都是为Java,Python和JavaScript编写的。
现在,您已经实现了代码测试覆盖率工具,您的DevOps管道应类似于本教程开头所示的DevOps管道图。
可选步骤
容器
如前所述,您可以将应用程序服务器托管在虚拟机或服务器上,但是容器是一种流行的解决方案。
什么是容器?简短的解释是,VM需要操作系统的巨大资源,这不但占用了应用程序的大小,而容器只需要一些库和配置即可运行应用程序。显然,VM仍然有重要的用途,但是容器是用于托管应用程序(包括应用程序服务器)的轻量级解决方案。
尽管容器还有其他选择,但是Docker和Kubernetes是最受欢迎的。
名称 | 执照 |
---|---|
Docker | 阿帕奇2.0 |
Kubernetes | 阿帕奇2.0 |
中间件自动化工具
我们的DevOps管道主要集中于协作构建和部署应用程序,但是您可以使用DevOps工具执行许多其他操作。其中之一是利用基础结构即代码(IaC)工具,也称为中间件自动化工具。这些工具有助于自动化中间件软件的安装,管理和其他任务。例如,自动化工具可以使用正确的配置提取应用程序(如Web应用程序服务器,数据库和监视工具),并将其部署到应用程序服务器。
以下是要考虑的几种开源中间件自动化工具:
名称 | 执照 |
---|---|
Ansible | GNU公共 |
saltstack | 阿帕奇2.0 |
chef | 阿帕奇2.0 |
puppet | Apache或GPL |
总结
这只是完整的DevOps管道外观的冰山一角。首先从CI/CD工具开始,然后探索其他可以自动化的方法,以简化团队的工作。另外,请研究可帮助您的团队更好地合作的开源工具。
关于我们
泽阳,DevOps领域实践者。专注于企业级DevOps运维开发技术实践分享,主要以新Linux运维技术、DevOps技术课程为主。丰富的一线实战经验,课程追求实用性获得多数学员认可。课程内容均来源于企业应用,在这里既学习技术又能获取热门技能,欢迎您的到来!(微信ID: devopsvip)
DevOps流水线实践课程
????戳阅读原文,进入课堂
使用开源工具构建DevOps管道的初学者指南相关推荐
- devops 开源工具链_使用开源工具构建DevOps管道的初学者指南
devops 开源工具链 DevOps已成为修复缓慢,孤立或其他功能不正常的软件开发流程的默认答案. 但是,当您不熟悉DevOps并且不确定从哪里开始时,这并不意味着什么. 本文探讨了什么是DevOp ...
- 如何使用开源工具构建您的网络安全工具包
如何使用开源工具构建您的网络安全工具包 | How to Build Your Cybersecurity Toolkits with Open Source Tools - Yu Chen, Aqu ...
- keras构建卷积神经网络_在python中使用tensorflow s keras api构建卷积神经网络的初学者指南...
keras构建卷积神经网络 初学者的深度学习 (DEEP LEARNING FOR BEGINNERS) Welcome to Part 2 of the Neural Network series! ...
- 【githubshare】开源的可视化数据管道构建工具,以更简便的方式,快速构建数据
推荐 GitHub 上一款开源的可视化数据管道构建工具:Orchest.以更简便的方式,快速构建数据管道,无需框架和 YAML 配置,可直接通过 Python.R.Julia 来编写代码,处理数据.一 ...
- N个免费DevOps开源工具,没用过,至少应该了解!
在介绍Devops工具之前,先跟随码花来了解下: Devops是个啥? Devops=[Development]+[Operations]. 简言之,Devops主要用于开发.测试.运维之间的沟通.协 ...
- 60款与DevOps相关的开源工具
原文地址:https://elasticbox.com/blog/de ... ools/ 你喜欢免费的东西吗?获得开发者社区支持的自动化,开源的工具是大家梦寐以求的.这里列举了 60+ 款最棒的开源 ...
- 最棒的60个DevOps开源工具
最棒的60个DevOps开源工具 你喜欢免费的东西吗?获得开发者社区支持的自动化,开源的工具是大家梦寐以求的.这里列举了 60+ 款最棒的开源工具,可以帮助你很好的实行 DevOps. 开发工具 版本 ...
- 9个用于构建容错系统的开源工具
我一直对 Web 开发和软件架构很感兴趣,因为我希望对一个可以工作的系统有一个整体的了解.无论你正在构建移动应用程序还是 Web 应用程序,它都必须连接到互联网,以便在不同的模块之间交换数据,这意味着 ...
- devops测试_使用DevOps管道自动执行用户验收测试
devops测试 验收测试 (也称为用户验收测试(UAT))确定系统是否满足用户需求,业务要求和授权实体标准. 通过软件开发生命周期(SDLC)开发应用程序时,每当有新设计时,都会重复测试. 在许多公 ...
最新文章
- mongo mysql 聚合性能_Mongodb和Mysql的性能分析
- ASP.NET页面生命周期与应用程序生命周期
- 10个优秀的 Web UI库/框架 详细出处参考:http://www.jb51.net/web/22251.html
- Sql Server 链接服务器图解
- python3.5安装scrapy_win10下基于python3.5安装scrapy教程
- Linux 下多核CPU知识
- VS2013使用NuGet下载资源时提示“Newtonsoft.Json”已拥有为“Microsoft.CSharp”定义的依赖项的错误
- 【问题解决】sql2012安装时卡在正在启动操作系统功能"NetFx3"上不动的解决办法...
- 三菱服务器显示b01,MR-JE-B三菱伺服驱动器的启动事项
- javascript轮播图超详细
- phpstudy下载、安装、配置、网站部署
- html怎么调用node.js,nodejs如何调用函数?
- c# 微信支付V3商家转账到零钱避坑宝典(一)
- android 夜间模式源码,Android Support Library 之 夜间模式
- 服务中读取当前用户注册表HKEY_CURRENT_USER
- Android——App内文件分享功能
- 【操作系统】CPU(处理器)调度
- matlab使照片卡通化,怎么样用matlab设计动画直接画出奥运五环
- 坚果云和百度云哪个好?
- 【每天学点管理】—绩效面谈的两个技巧
热门文章
- 华为鸿蒙5g售价,华为鸿蒙OS装机测试:5G网络+麒麟980+良心价,打造高性价比手机...
- CLAN Studio Toolkits - Enum Creator
- 特效大片背后的多视角 3D 人体姿态估计技术
- Zeit 的一些产品 --swr,next.js,hyper and now
- 示波器测量高频信号为什么要用x10档(二)
- jvm垃圾回收的过程
- 操作系统——文件目录+对磁盘的管理
- 物联网竞赛-基于CC2530寄存器开发-基础知识学习
- 6 理解业务概念和业务组件
- 520 钻石争霸赛 2023