DevOps流程涉及到需求管理(包括需求的任务管理、进度管理等)、持续集成、版本管理、代码编译、测试、配置管理和监控等多项工作任务。DevOps需要构建相应的工具链,将工作任务自动化,才能实现自动化的持续交付流水线。
在这条工具链上,有多种工具可供选择,本文列举了可实现各工作领域工作自动化的主流工具。
一、需求管理
需求是软件的“源头”,对需求的管理、跟踪,也是对软件项目的管理。典型的工具包括:
1、JIRA
澳大利亚Atlanssian公司的产品,支持任务管理、计划管理、图标报告。
2、Kanboard,看板工具。
将故事卡片进行可视化,使用不同颜色区分不同类型的故事卡,将日常工作可视化。
支持拖拽。
引入在制品概念,提供在制品WIP(Work In Process)列,通过设定WIP上限数量,暴露问题,解决问题,从而提升交付速率和质量。
3、Rally
有2个版本:
(1)社区版(Community Edition),基于敏捷和精益的项目管理模式。免费试用版提供10个用户、5个项目同时使用。
(2)无限版(Unlimited Edition),基于云平台。15天试用,不限用户数。
二、持续集成
1、Jenkins
实现软件的自动化编译、测试、部署。
引入Pipeline概念,实现了工作流即代码(Pipeline as Code)。
2、Bamboo
澳大利亚Atlanssian公司的产品,实现持续集成、持续部署、持续交付的工具。
30天试用版。
3、Travis CI
可无缝的构建、测试GitHub上的项目。
通过.travis.yml文本文件实现工作流即代码(Pipeline as Code)的管理。
三、版本管理
版本是发布的基石,所有与发布相关的内容都需要版本管理。
1、Git
开源的分布式版本管理系统,基于数据设计存储。
2、GitHub
基于Web的Git仓库服务,是一个中央协作平台,当前托管了大量项目,可以使用GitHub进行开发、代码评审、bug跟踪等。
提供网页版的图形界面和桌面集成。
3、GitLab
类似GitHub,同时提供Wiki知识库功能和bug跟踪功能。
4、Subversion
是Apache许可证下的集中式开源版本管理工具,包含了CVS所有的功能。
5、Mercurial
跨平台的分布式版本管理系统,支持windows、Unix(FreeBSD、MacOS、Linux),使用Python语言开发。
四、编译工具
1、Ant
实现软件编译过程自动化,最早用于2000年的Apache Tomcat项目开发。
使用Java语言开发。
无法简便的支持频繁修改依赖关系的项目。
2、Maven
意思是知识的累加器,最早用于Java项目的自动化构建,功能单一。
3、Gradle
是Android Studio内置的封装部署工具,它改进了Ant 和Maven的缺点。
4、MSBuild
.NET框架下的构建工具,Visual Studio依赖MSBuild。使用Visual StudioIDE生成项目,MSBuild的项目文件会自动生成。
五、配置管理
1、chef对公司的服务器进行流水线式的任务配置和维护,能集成到主流云平台,如AWS、Open Stack、Azure。
2、Puppet
提供了一套标准的操作方式,实现软件的交付和维护
支持Unix和Window
3、Ansible
集成了多节点部署、执行ad hoc任务、配置管理功能
特别适合集群管理的机器。
被Redhat收购后,商业版Ansible Tower可以进行自动扩容、管理复杂的部署操作,工作流可以将配置的步骤可视化展示出来。
六、测试
1、Junit
针对Java代码级的单元测试工具
2、Selenium
支持多语言的测试脚本:Java、C#、Groovy、Perl、PHP、Python、Rubby
基于UI的测试,支持多种浏览器
支持移动应用测试,通过驱动,可以对Android 、IOS的UI进行测试
3、Cucumber
自动化验收测试,用户行为驱动开发模式(BDD)的测试工具。采用Given-When-then的格式创建一个.feature文件,包含给定的执行条件,Cucumber执行这个文件即完成一个测试用例。
测试用例的执行报告可以通过Junit的Junitreport模块生成。
4、FitNesse
自动化验收测试+web服务器+wiki,需求可以直接通过web浏览器的方式创建和修改,即wiki。在FitNesse里创建的需求,可以被FitNesse自动执行。
七、监控
1、Nagios
监控网络、系统、基础架构(主机、磁盘、进程)、节点
2、Zabbix
企业级健康,可监控上万台服务器、虚拟机的性能和状态。
2017-11-27