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
企业级健康,可监控上万台服务器、虚拟机的性能和状态。