写点什么

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

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

关注

评论

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

【51单片机】点亮LED灯(四种形式)

謓泽

3月月更

DNA to Face,会是寻人缉凶的一颗“银弹”吗?

脑极体

毕业总结

whoami

架构训练营

信息安全无小事!教你如何做日志脱敏

卢永德

翻译 | 解读首部 Kubernetes 纪录片

RadonDB

开源 Kubernetes RadonDB

操作系统面试总结

yuexin_tech

操作系统

39 个 Java 集合框架面试题

逆锋起笔

java面试 死磕 Java 基础 3月月更 Java集合框架

产品帮助中心的制作方法及工具推荐

小炮

实用机器学习笔记二十四:模型调参

打工人!

学习笔记 机器学习算法 3月月更 模型调参

Go学习笔记——条件判断if

为自己带盐

Go 学习笔记 3月月更

VuePress 博客优化之增加 Valine 评论功能

冴羽

JavaScript 前端 vuepress 博客搭建 Alogia

Python 获取字典中的第一个键

AlwaysBeta

Python 程序员 编程语言 字典

毕业总结

皓月

「架构实战营」

知识管理的成功案例大赏

小炮

AHPA:开启 Kubernetes 弹性预测之门

阿里巴巴云原生

阿里云 Kubernetes 云原生 AHPA 弹性预测

基于云效代码管理的源码漏洞检测是怎样的?

阿里云云效

阿里云 代码 代码管理 源代码 Codeup

java高级用法之:调用本地方法的利器JNA

程序那些事

Java nio 程序那些事 3月月更

优雅的DO,VO,DTO转换工具MapStruct

卢永德

3月月更

写给20几岁的程序员

shellc

财富 35岁

华为SmartCare和AUTIN品牌升级:助力运营商走出5G发展迷宫

白洞计划

URL重定向及跳转漏洞

喀拉峻

网络安全

尚硅谷Maven新版视频教程发布

@零度

maven

科技创新力强,旺链科技创始人刘涛荣登G60科创走廊创业榜单

旺链科技

区块链 产业区块链 创新创业

Java 8 Stream 从入门到进阶——像SQL一样玩转集合

Geek_rze78a

Java JAVA stream

程序员硬核测评:全方位测评 GaussDB(for Redis) 和开源 Redis

华为云数据库小助手

性能分析 GaussDB GaussDB ( for Redis ) 华为云数据库 开源Redis

重点操作之上线、恢复、部署 - 大屏云极简使用手册

shulinwu

恒源云(GpuShare)_医学图像分割:MT-UNet

恒源云

深度学习 机器翻译 transform

Linux中如何使用Htop监控工具?【网络安全】

H

Linux 网络安全

Go实现并发聚合,批量提交功能

人生如梦

Go 并发 请求聚合

电商秒杀系统架构设计文档

皓月

「架构实战营」

用 vite 2 平滑升级 vue 2 + webpack 项目实战

CRMEB

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