免费下载案例集|20+数字化领先企业人才培养实践经验 了解详情
写点什么

使用开源工具构建 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:557292
用户头像

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

关注

评论

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

LeaRun.Java可视化流程简单配置过程

雯雯写代码

java

Tensorflow Lite移动平台编译|Bazel实践

轻口味

人工智能 tensorflow ios android 10月月更

谈 C++17 里的 Command 模式

hedzr

设计模式 命令模式 Design Patterns c++17 Command Pattern

场外OTC交易软件系统开发介绍(源码)

Spinnaker:云原生多云环境持续部署的未来

博文视点Broadview

华为云GaussDB深耕数字化下半场,持续打造数据库根技术

华为云开发者联盟

Serverless 云原生 华为云 GaussDB 云数据库

直播预告 | Apache APISIX × Apache SkyWalking 线上分享

API7.ai 技术团队

Apache Skywalking API网关 APISIX Meetup

netty系列之:让TLS支持http2

程序那些事

Netty 网络协议 HTTP 程序那些事 http2

Vue进阶(幺肆贰):CSS-静态定位,相对定位,绝对定位,固定定位的用法和区别详解

No Silver Bullet

Vue 元素定位 10月月更

全周期数据管控,为「快递大数据+」保驾护航

BinTools图尔兹

一文读懂「TTS语音合成技术」

澳鹏Appen

人工智能 语音 nlp 语音合成 TTS

存储大师班 | 浅谈数据保护之快照与备份

QingStor分布式存储

分布式存储 快照 备份

java.lang.OutOfMemoryError:GC overhead limit exceeded

看山

Java OOM 10月月更

JavaAgent查看动态生成类的源码

长河

英特尔联合阿里巴巴深化从云到端全面技术合作,加速数智中国创新发展

科技新消息

滚雪球学 Python 番外篇之游戏世界,游戏也有 Hello World

梦想橡皮擦

10月月更

币币交易APP系统开发费用(源码)

数字货币交易软件系统开发介绍(搭建)

广角-聊聊Underlay

Lance

容器 云原生 Underlay

场外OTC交易系统APP开发(案例)

带你掌握java反序列化漏洞及其检测

华为云开发者联盟

Java 安全 漏洞

【LeetCode】最小操作次数使数组元素相等Java题解

Albert

算法 LeetCode 10月月更

Python代码阅读(第41篇):矩阵转置

Felix

Python 编程 Code Programing 阅读代码

技术分享| 音视频多频道使用的正确姿势

anyRTC开发者

音视频 WebRTC 实时通信 多频道

币币撮合交易软件系统开发(源码搭建)

主干开发你必须知道的7件事

华为云开发者联盟

产品 测试 团队 开发 主干开发

助力建设智慧社区,EMQ 映云科技服务美好生活

EMQ映云科技

物联网 mqtt 智慧社区

边缘AI方案落地问题探讨

华为云开发者联盟

机器学习 AI 算法 边侧数据 边缘云

为金融场景而生的数据类型:Numeric

青云技术社区

postgresql 云计算 源码 云原生

新手 Gopher 如何写出更健壮的 Go 代码

baiyutang

golang 10月月更

【Flutter 专题】24 易忽略的【小而巧】的技术点汇总 (三)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 10月月更

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