写点什么

使用开源工具构建 DevOps Pipeline 的初学者指南

  • 2019-04-15
  • 本文字数:3943 字

    阅读完需:约 13 分钟

使用开源工具构建DevOps Pipeline的初学者指南

DevOps 生态需要考虑各种需求,例如持续集成方案、源控制管理、自动化构建、服务器选择、测试覆盖率等。本文通过 5 个关键步骤,向 DevOps 初学者介绍如何通过流行的开源工具来解决这些需求。


DevOps 在修复缓慢、孤立或其他功能失调方面已成为软件开发过程的首选方案。如果刚接触 DevOps 并且不确定从哪里开始,可以参考本文 DevOps Pipeline 的内容,以及创建一个 Pipeline 的五个步骤。

DevOps 之旅

我曾经在花旗集团的云团队工作,开发基础架构即服务(IaaS)Web 应用程序来管理花旗的云基础架构,但总想找到方法来提高开发流程效率,并为开发团队带来积极的文化变革。我在 Greg Lavender 推荐的一本书中找到了答案,他是花旗云架构和基础设施工程的首席技术官,书名叫The Phoenix Project,它像一本小说一样阐释了 DevOps 的原则。


下面的表格显示了不同公司部署到发布环境的频率:



Amazon、Google 和 Netflix 的频率是如何做到的?这是因为这些公司已经找到了制作一个近乎完美的 DevOps Pipeline 的方法。


花旗在实施 DevOps 之前,情况并非如此良好。那时候,团队有不同的阶段性环境,但是开发服务器的部署是非常手动的。所有开发人员只能访问基于 IBM WebSphere Application Server Community Edition 的一个开发服务器。问题是,当试图为多个用户同时进行部署时,服务器就会崩溃,因此开发人员不得不在即将进行部署时让对方知道,这点让人非常痛苦。此外,还存在代码测试覆盖率低、手动部署过程繁琐,以及无法绑定已定义的任务或用户故事来跟踪代码部署的问题。


我意识到必须要做一些改变,并找到了志同道合的同事。我们决定合作构建一个初始 DevOps 管道 - 他在 Jenkins 工作期间设置了虚拟机和 Tomcat 应用服务器,与 Atlassian Jira 和 BitBucket 集成等。之后,该项目取得了巨大成功:几乎完全自动化了开发流程,在开发服务器上实现了近 100%的正常运行时间,可以跟踪和改进代码测试覆盖率,Git 分支可以与部署和 Jira 任务相关联。并且,用于构建 DevOps 管道的大多数工具都是开源的。我现在意识到,DevOps 管道还存在不足,因为没有利用类似 Jenkins 文件或 Ansible 这样的高级配置。然而,这个简单的过程运作良好,可能是由于帕累托原则(也称为 80/20 规则)。

DevOps 和 CI/CD Pipeline 简要介绍

如果随便问几个人,“什么是 DevOps?”,可能会得到几个不同的答案。与敏捷开发一样,DevOps 已经发展到包含许多不同学科,但是大多数人会认可:DevOps 是一个软件开发实践或者软件开发生命周期(SDLC),核心原则是一种文化变革,开发人员和非开发人员都在一个原本是手动操作、现在是自动化的环境中工作,每个人都做最擅长的事情,每个时期的部署数量都在增加,吞吐量也在增加,灵活性则逐渐提高。


虽然合适的软件工具并不是实现 DevOps 环境所需的唯一办法,但有些工具是必需的。关键是持续集成和持续部署(CI/CD)。Pipeline 构建了一个环境,具有不同的阶段(例如,DEV,INT,TST,QA,UAT,STG,PROD),手工部分被自动化,开发人员可以实现高质量、高灵活性的代码,并允许大量部署。


本文介绍了使用开源工具创建 DevOps Pipeline 的五步方法,如下图所示:


第 1 步:CI/CD 框架

第一件事是找一款 CI/CD 工具。Jenkins 是一个基于 Java 开源的、基于 MIT 许可证的 CI/CD 工具,已成为 DevOps 的标准。


Jenkins 是什么?想象一种神奇的通用遥控器,Jenkins 可以与许多不同的服务和工具交互协调。类似 Jenkins 这样的 CI/CD 工具本身没多大用,但随着插入不同的工具和服务,将变得越来越强大。


Jenkins 只是众多开源 CI/CD 工具中的一种,可以利用它来构建 DevOps Pipeline。


NameLicense
JenkinsCreative Commons and MIT
Travis CIMIT
CruiseControlBSD
BuildbotGPL
Apache GumpApache 2.0
CabieGNU


以下是使用 CI/CD 工具的 DevOps 流程:



现在本地主机中运行了 CI/CD 工具,可以开始 DevOps 之旅的下一步。

第 2 步:源控制管理

验证 CI/CD 工具是如何运作最佳(也可能是最简单)方法是与源控制管理(SCM)工具集成。为什么需要源代码管理?假设正在开发一个应用程序,无论何时要构建应用程序,都需要编程,无论是 Java、Python、C ++、Go、Ruby、JavaScript 还是其他任何一种编程语言,所编写的编程代码称为源代码。


一开始,尤其是独自工作时,开发者将所有内容放在本地目录可能是可以的。但是,当项目变得更大并且需要邀请其他人协作时,需要一种方法来避免合并冲突,同时有效共享代码修改,还需要一种方法来恢复以前的版本,备份、复制和粘贴就显得比较落伍,开发者可能需要更好的东西。


这就是 SCM 几乎成为必需品的原因,SCM 工具通过将代码存储在存储库中,对代码进行版本控制,在项目成员之间进行协调来提供帮助。


实际上,有很多 SCM 工具,Git 是一个标准。强烈建议使用 Git,但如果愿意,还有其他开源可选:


NameLicense
GitGPLv2 & LGPL v2.1
SubversionApache 2.0
Concurrent Versions System (CVS)GNU
VestaLGPL
MercurialGNU GPL v2+


以下是添加 SCM 后 DevOps 管道的样子:



CI/CD 工具可以自动执行源代码迁入和迁出,执行跨成员协作任务。但是,如何将其变成一个有效的应用程序,以便数十亿人可以使用和欣赏呢?

第 3 步:自动化构建工具

开发者可以查看代码并将更改提交到源代码管理,然后邀请朋友进行源代码管理开发和协作。如果到目前还没有构建应用程序,要使其成为一款 Web 应用程序,必须进行编译并放入可部署的包或作为可执行文件运行。(请注意,像 JavaScript 或 PHP 这样的解释型语言不需要编译)


现在来看看自动化构建工具。无论决定使用哪种构建工具,都有一个共同目标:将源代码构建为某种所需格式,并自动执行任务来清理、编译、测试并部署到特定位置。构建工具将根据编程语言而有所不同,这里有一些常见的开源选项可以考虑:


NameLicenseProgramming Language
MavenApache 2.0Java
AntApache 2.0Java
GradleApache 2.0Java
BazelApache 2.0Java
MakeGNUN/A
GruntMITJavaScript
GulpMITJavaScript
BuildrApacheRuby
RakeMITRuby
A-A-PGNUPython
SConsMITPython
BitBakeGPLv2Python
CakeMITC#
ASDFExpat (MIT)LISP
CabalBSDHaskell


现在,可以将自动化构建工具的配置文件放入源代码管理,然后让 CI/CD 工具构建它:



一切都很好,对吧?但是,在哪里进行部署呢?

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

到目前为止,开发者有一个可执行或可部署打包文件。对于任何真正有用的应用程序,必须提供某种服务或接口,但还需要一个容器来托管应用程序。


对于 web 应用程序,web 服务器就是这类容器。应用程序服务器提供了这样一个环境,可以检测可部署包内的编程逻辑、公开接口,通过 socket 向外部提供 web 服务。HTTP 服务器以及其他一些环境(如虚拟机)可以用来安装应用程序服务器。


有许多可用的开源 web 应用程序服务器:


NameLicenseProgramming Language
TomcatApache 2.0Java
JettyApache 2.0Java
WildFlyGNU Lesser PublicJava
GlassFishCDDL & GNU Less PublicJava
Django3-Clause BSDPython
TornadoApache 2.0Python
GunicornMITPython
Python PasteMITPython
RailsMITRuby
Node.jsMITJavascript


现在,DevOps Pipeline 基本可以使用:



虽然可以就此进行下一步集成,但代码质量对于应用程序开发人员来说是一件很重要的事情。

第 5 步:代码测试覆盖率

另一个繁琐的要求可能是实现代码测试,开发人员需要尽早捕获应用程序中的任何错误,提高代码质量以确保最终用户满意。幸运的是,有许多开源工具可用于测试代码并提出改进其质量的方法。更好的消息是,大多数 CI/CD 工具可以插入这些工具并将这个过程自动化。


代码测试分为两部分:协助编写、运行测试的代码测试框架,以及有助于提高代码质量的代码质量建议工具。


代码测试框架:


NameLicenseProgramming Language
JUnitEclipse Public LicenseJava
EasyMockApacheJava
MockitoMITJava
PowerMockApache 2.0Java
PytestMITPython
HypothesisMozillaPython
ToxMITPython


代码质量建议工具:


NameLicenseProgramming Language
CoberturaGNUJava
CodeCoverEclipse Public (EPL)Java
Coverage.pyApache 2.0Python
EmmaCommon Public LicenseJava
JaCoCoEclipse Public LicenseJava
HypothesisMozillaPython
ToxMITPython
JasmineMITJavaScript
KarmaMITJavaScript
MochaMITJavaScript
JestMITJavaScript


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


现在已经实现了代码测试覆盖工具,DevOps Pipeline 应该类似于本教程开头所示的 DevOps Pipeline 图。

可选的步骤

容器

如上所述,可以在虚拟机或服务器上托管应用程序服务器,但容器是一种流行的解决方案。


什么是容器?简短的解释就是 VM 自身需要占用操作系统的巨大空间,这会占用应用程序的大小,而容器只需要一些库和配置就可以运行应用程序。显然 VM 仍有重要的用途,但容器是托管应用程序(包括应用程序服务器)的轻量级解决方案。


虽然有多种容器可选择,但 Docker 和 Kubernetes 是最受欢迎的:


NameLicense
DockerApache 2.0
KubernetesApache 2.0

中间件自动化工具

DevOps Pipeline 主要侧重于协作构建和部署应用程序,还可以使用 DevOps 工具执行许多其他操作。其中之一是利用 Infrastructure as Code(IaC)工具,也称为中间件自动化工具。这些工具有助于自动化中间件软件的安装、管理和其他任务。例如,自动化工具可以通过正确的配置提取应用程序(如 Web 应用程序服务器、数据库和监视工具),并将它们部署到应用程序服务器。


以下是几个可以考虑的开源中间件自动化工具:


NameLicense
AnsibleGNU Public
SaltStackApache 2.0
ChefApache 2.0
PuppetApache或GPL


原文链接:A beginner’s guide to building DevOps pipelines with open source tools


2019-04-15 11:557547
用户头像

发布了 43 篇内容, 共 35.1 次阅读, 收获喜欢 136 次。

关注

评论

发布
暂无评论
发现更多内容

4种常见分支模式解析及优劣对比 | 研发效能提升36计

阿里云云效

阿里云 云原生 研发团队 研发 分支管理

OAuthApp H5 应用开发/云托管平台

unclewang

微服务 前端 .net core H5制作 SaaS平台

大咖说|制造业发展趋势:“专精特新”与数字化转型

大咖说

阿里巴巴 阿里云 数字化 中制智库

大画 Spark :: 网络(5)-Spark中的server端和client端

dclar

大数据 hadoop spark Spark 源码 大数据开发

社区人物志|缪翎:见证开源世界的女性力量

ApacheDoris

大数据 开源 数据分析 OLAP apache doris

项目启动 | 德荣医疗携手用友iuap共谱数字化转型新篇章

用友BIP

用友 用友iuap

企业如何快速地制作出电子产品宣传册?

小炮

Flutter 容器盒子布局模型

岛上码农

flutter ios 安卓 移动端开发 3月月更

你可以不知道KFC疯狂星期四,但不能不知道InfoQ会员周!七天限时福利冲冲冲!

InfoQ写作社区官方

热门活动 InfoQ会员周

数据孤岛下的新破局 Real Time DaaS:面向 AP+TP 业务的数据平台架构

tapdata

数据中台 数据仓库 异构数据 Real Time DaaS DaaS

教你Mac下终端配置iterm2+oh-my-zsh+powerlevel10k

锋享前端

Mac iterm2

Hoo虎符研究院|区块链简报20220307期

区块链前沿News

Hoo 虎符交易所 虎符研究院

安全代码审计-PHP

网络安全学海

网络安全 信息安全 渗透测试 漏洞 代码审计

分库分表中间件的高可用实践讲解

Linux服务器开发

高可用 高并发 中间件 Linux服务器开发 Linux后台开发

LigaAI完成A轮融资,加速打造全新的智能研发协作平台

LigaAI

行业资讯 智能 LigaAI A轮融资 研发协作平台

视频渲染靠cpu还是显卡 视频渲染的作用是什么

懒得勤快

基于 XuperChain 的区块链项目从 0 到 N(二)

刘旭东

区块链 XuperChain

Amazon Graviton2上数据压缩算法性能比较

亚马逊云科技 (Amazon Web Services)

数据 应用性能

全网渗透率达80%!“耳朵经济”将成为当下市场的流行趋势

易观分析

耳朵经济 在线音频

Tech Talk 活动预告 | 为什么说 Serverless 是应用开发的未来?

亚马逊云科技 (Amazon Web Services)

Serverless

java高级用法之:无所不能的java,本地方法调用实况

程序那些事

Java Netty 程序那些事 3月月更

关于中国芯片,这些话如鲠在喉

脑极体

改进DevSecOps框架的 5 大关键技术

禅道项目管理

DevOps 敏捷 自动化

服务器被入侵了?反手溯源出入侵者画像【网络安全】

H

黑客 网络安全

2个动作,让研发效率提升120%,代码减少50%

云智慧AIOps社区

敏捷开发 代码优化 开发规范 研发提效 研发效率

Web 键盘输入法应用开发指南 (6) —— 开发实战(一)

天择

JavaScript 键盘 实战 输入法 3月月更

2022 年了,还不了解 PWA ? 教你 VuePress 博客如何快速兼容 PWA

冴羽

JavaScript Vue 前端 vuepress PWA

springsecurity默认用户生成

急需上岸的小谢

selenium操作元素遇到的异常

红毛丹

selenium

天翼云基于 KubeEdge 的大规模 CDN 场景落地实践

华为云原生团队

开源 云原生 边缘计算 边缘技术 边缘云

小程序的第六年,我们还能怎么玩?

知晓云

小程序 微信 小程序生态 小程序运营

使用开源工具构建DevOps Pipeline的初学者指南_服务革新_Bryant Son_InfoQ精选文章