企业在业务安全与数据合规过程中有哪些实践与挑战?戳此了解 了解详情
写点什么

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

  • 2019 年 4 月 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 年 4 月 15 日 11:556614
用户头像

发布了 40 篇内容, 共 30.1 次阅读, 收获喜欢 129 次。

关注

评论

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

redis未授权访问漏洞复现

喀拉峻

redis 黑客 网络安全 安全 信息安全

项目管理是做什么

PingCode

Scrum Master需要具备哪些能力和经验

华为云开发者社区

Scrum 敏捷 团队 教练 Scrum Master

Kafka 为什么这么快?多的是你不知道的事

码哥字节

kafka 消息队列 1月日更 1月月更

十大视频场景化应用工具+五大视频领域冠军/顶会算法重磅开源!

百度大脑

【高并发】导致并发编程频繁出问题的“幕后黑手”

冰河

并发编程 多线程 高并发 协程 异步编程

前额皮质如何影响我们的工作效率?

LigaAI

工作效率 脑科学

Python 为什么不设计 do-while 循环结构?

Python猫

Python

(1-14/14) 首位销售人员

mtfelix

300天创作 2022Y300P

软件设计——依赖倒置

苏州程序大白

架构师

GIS :元宇宙未来发展的有力技术支撑

华为云开发者社区

AI GIS 虚拟世界 数字孪生 云宇宙

ReactNative进阶(二十三):Javascript 严格模式详解

No Silver Bullet

React Native 1月月更

阿里首席架构师解读:Spring Cloud与Docker微服务架构实战

不想秃头

Java 程序员 微服务 SpringCloud

TDSQL PG版企业级分布式数据库技术创新实践

腾讯云数据库

tdsql 国产数据库

使用无参数函数进行命令执行

网络安全学海

黑客 网络安全 信息安全 渗透测试 安全漏洞

Scrum Master如何参与每日Scrum(Daily Scrum)

Bruce Talk

Scrum 敏捷 Agile Coach/Facilitate

Go 语言快速入门指南:Go 并发初识

宇宙之一粟

golang 并发 Go 语言 1月月更

TDSQL | 将企业级分布式数据库做到极致

腾讯云数据库

tdsql 国产数据库

ONES CTO 冯斌|如何低成本地做出高质量决策

万事ONES

低代码实现探索(二十二)如何构建一个可以看的懂的系统

零道云-混合式低代码平台

1月月更|推荐学java——Spring之AOP

逆锋起笔

spring SSM框架 spring aop 依赖注入 面向切面编程

Hive SQL底层执行原理

五分钟学大数据

Hive SQL 1月月更

Chrome插件:摸鱼倒计时、每日摸鱼时间统计,奋斗逼、卷王必备,用于减少摸鱼时间和频率

OBKoro1

效率 开源 效率工具 chrome扩展 高效率

虎符研究院深入解读Web3.0未来趋势 盘点代表性项目

区块链前沿News

Web Hoo虎符 虎符研究院 虎符平台 3.0

架构实战营第 4 期 -- 模块七作业

烈火干柴烛灭田边残月

架构实战营

人效将是快消品企业未来发展的最大瓶颈

百度大脑

人工智能

混沌工程之 Linux 网络故障模拟工具TC

zuozewei

Linux 混沌工程 1月月更

如何处理消息丢失问题?

JavaEdge

1月月更

架构实战训练营-模块7-作业

温安适

「架构实战营」

为什么HashMap会产生死循环?

王磊

TDSQL-C for PostgreSQL 主从架构详解

腾讯云数据库

tdsql 国产数据库

WAVE SUMMIT 2022 深度学习开发者峰会

WAVE SUMMIT 2022 深度学习开发者峰会

使用开源工具构建DevOps Pipeline的初学者指南_云计算_Bryant Son_InfoQ精选文章