如何选择正确的DevOps工具

坦白的讲:世界上没有哪一种工具可以像DevOps这么神奇(或敏捷,或精益)。DevOps在开发和运营团队之间创建了完美的合做与沟通,所以与其说这是一种神奇的工具,不如说是一种文化的转变。ios

然而,团队之间也拥有支持自动化和协做的工具及技术。常常有人问咱们在Atlassian时关于支持DevOps工做方式所用到的工具(除了咱们本身)。因此,我准备拟定一份购买指南,标明购买DevOps工具时所须要的东西而且告知您咱们团队所用到的工具。web

尽管许多工具都能以这种或那种的方式在开发周期的各个阶段发挥做用,但没有一种工具能在每一个阶段起到主要做用。因此,当咱们谈及DevOps工具时,将其分解到各阶段是颇有帮助的。我将其分解成:规划、构建、持续集成、部署、运营以及持续反馈。api


1.    规划2.    构建3.    持续集成4.    部署5.    运营6.    持续反馈


1.    规划

视觉与设计方面达成协做bash

根据敏捷手册中的内容,咱们推荐使用在规划中容许您的开发团队实现迭代的工具。这样,您就能很快地从用户那里获知状况,并经过用户反馈优化产品。寻找可以提供sprint规划特色的工具。服务器

另外,优先考虑为您的开发团队持续收集用户反馈,并加以组织造成可执行信息。寻找能够支持“异步讨论”的工具(若是您愿意)。重要的是每一个人均可以分享并发表评论:想法、策略、目标、需求、路线图以及文档。架构

不要忘记整合。不管您决定将功能或项目开发到多大范围,都应当将用户想法列入您的开发列表。并发

咱们使用的工具:Confluence, HipChat,JIRA Softwareapp

2.    构建

开发的阶段环境运维

虽然Puppet和Chef主要受益于运维,但开发人员经过工具来提供各阶段的开发环境好比Docker。虚拟编码和可支配的产品副本能够帮助您完成更多工做。dom

一些奇怪的类路径?Mave安装忽然被损坏?基础设施自动化意味着从新配置比修复的速度更快,也更可靠,这也意味着您能够加快升级您的开发环境。

当整个团队在相同配置的环境中工做时,“用本身的机器工做!”别开玩笑了,这是真的(如今就是在开玩笑)。

咱们使用的工具:Docker

 

基础设施自动化

开发人员建立模块化应用,由于模块化应用更加可靠,易于维护。因此,为什么不将这种想法延续至IT基础架构之中?

这很难应用到系统之中,由于他们老是在不断变化。所以咱们经过代码配置加以解决。配置代码可应用于裸机,并将服务器恢复至基线水平。

它能够存储在版本控制系统中。可对其进行测试。归入CI(持续集成)中。同行评审。您能够对其进行命名。

当在代码中对系统知识库编译时,题目文件和内部文档变得不过重要。产生可重复的流程和可靠的系统。少说话,多作事。

咱们使用的工具:Bamboo, Bitbucket, Chef,Docker, Puppet

 

协做编码

不须要等待董事会批准后再部署到生产环境中,您能够经过“拉请求”进行同行评审,以提升代码质量和生产量。

什么是拉请求?“拉请求”能够将您在资源库发布一个开发分支的变化告知您的团队。随后您的团队能够查看这个更改,并在将它们集成到主代码行以前进行讨论修改。

3.    持续集成

持续集成

持续集成就是天天都要对共享存储库中的代码进行屡次检查,而且每次都要对其进行测试。这样,您能及时发现问题,在最初阶段修复它们,并尽量早的向你的用户展示新的功能。

因为分支和合并的工做流程是时下比较流行的(这是理所固然的!),因此避免在多分支环境中运行CI的工具能够保证在不下降开发速度的状况下进行严格的测试。

寻找那些能够自动将测试结果应用到开发分支中的工具,并在分支构建成功时为您提供是否将其推送至master的选择。除了这一点,您能够经过一个简单的集成从您的团队沟通工具中得到实时警报。

咱们使用的工具:Bamboo, HipChat

 

自动化测试

从长远来看,自动化测试的回报会随着时间的推移经过加快开发和测试周期体现。而在一个DevOps环境中,最重要的是它的另外一个缘由:意识。

对于准备和支持开发构建工做,自动化测试的操做过程透明化以及完全性是很是重要的。与手动测试不一样,自动化测试每次均可以保证诚信地执行且遵循相同的标准。它们还会生成报告和趋势图,以帮助识别高风险区域。

风险在软件中是真实存在的,但您不能忽略您没法预料的风险。帮您的运营团队一个忙,让他们和您一块儿探究幕后是如何运行的。寻找能支撑墙板的工具,让每一个人均可以参与项目的具体构建或部署结果的评论中。工具的额外加分特色是可以使在突击测试和探索性测试中的相关操做更加容易。

咱们使用的工具:Bamboo, Bitbucket,Capture for JIRA

4.    部署

发布仪表盘

软件交付中压力最大的部分之一是让全部的变化、测试以及未发布的版本信息部署到一个地方。任何人在发布前经历的最后一件事情是须要一个漫长的会议来报告状态。这就是发布仪表盘流行的地方。

寻找一个集成了您的代码库和部署工具的单一仪表盘工具。在一个地方对于你想寻找的关于分支,构建,拉请求和部署警告等信息提供高可视化。

咱们使用的工具:JIRA Software

 

自动化部署

没有什么神奇的方式可让自动化部署工做于每一个应用程序和IT环境中。可是,使用Ruby或bash将Operations’runbook转换成一个cmd-executable脚本是一种经常使用的启动方法。良好的工程实践是相当重要的。使用变量分解出主机名 – 为每一个环境提供独特的脚本或者代码是无趣的(至少一半是无心义的)。建立实用方法或脚本以免代码重复。而且同行审查您的脚本,执行完整性检查。

首先尝试自动化部署到您的最低级别的环境中,其中您将频繁地使用自动化,接着复制全部的方式至生产环境。若是不出意外,此次练习强调了您的环境之间的差异,并生成一个标准化的任务列表。做为奖励,经过自动化,标准化部署减小了环境内部和之间“服务器漂移”。

像Puppet和Chef等配置工具减小了在标准化环境中的困难。而且有负载工具协助自动化部署。Atlassian公司本身的Bamboo支持逐步协调复杂部署,并为每一个环境的历史提供可视性。

集成了Puppet或Chef的HipChat容许您从聊天室控制部署。经过简单搜索,您确定可以找到一种适合您且在运算内的应用程序。

咱们使用的工具:AWS, Bamboo, HipChat,Puppet

5.    运营

应用程序及服务器性能监控

应该对如下两种类型实施自动化监控:服务器监控和应用程序性能监控

手动““topping”一个盒子或经过测试接入您的API都对现场检查是有帮助的。可是要了解趋势和您应用程序(和环境)的总体健康情况,您须要7X24小时能够监听和记录数据的软件。

如您所想:这样一种应用软件是存在的。事实上有不少这样的软件。New Relic,Splunk和Nagios是最受欢迎的,并且可以知足这两种类型的监控。寻找能够与您的群组聊天客户端相集成的工具,以便将提醒信息直接发送给您的团队群或某事件的专属群。

咱们使用的工具:BigPanda,HipChat,HostedGraphite,Nagios,NewRelic,PagerDuty,Pingdom,Splunk

 

沟通与集群

跨团队沟通是实现文化转变的第一步,聊天工具可促进它的实时性。不少聊天工具都有专用的群,在这里专家能够对发布在群里的事件及时跟进,并快速修正。

一样重要的还有保持警戒,这样能够最大限度地维持正常运行时间。寻找一个可扩展和可集成监控工具的聊天工具,让您不会错过任何一个重要的服务降级警报。

最受企业喜好的是拓展他们本身以外的沟通。寻找一个能够帮您及时通知用户的工具,让他们实时了解您的动态。

咱们使用的工具:BigPanda,DataDog, HipChat,NewRelic, PagerDuty,StatusPage

 

事件、变动和问题跟踪

增进团队之间协做的关键是确保他们能够查看相同的工做。当事件被报告时发生了什么?他们是否有联接并追踪软件的问题?当发生改变时,他们是否与发布相关联了?

没什么比在不一样的系统中进行事件和软件项目追踪更能阻碍开发与运维间的协做了。寻找那些使事件、变化、问题和软件项目在一个平台上的工具,帮助您快速识别并解决问题。

咱们使用的工具:JIRA Service Desk,JIRA Software

6.    持续反馈

经过用户反馈创造更好的产品

客户已经告诉您,您是否创造了合格的产品——您只须要倾听便可。这包括NPS数据、流失调查、bug报告、支持文件,甚至是事件推文。在DevOps文化中,产品团队中的每一个人都可以查看用户评论,由于他们为一切从发布计划到探索性测试提供帮助指导。

寻找应用程序将您的聊天工具与您最喜好的调查平台及集成用于收集NPS的反馈。Twitter和/或Facebook也能够与聊天工具集成进行实时反馈。为了更深刻的分析来自社会化媒体的反馈,一个可使用历史数据得出报告的社交媒体管理平台是很值得投资的。

分析并引入反馈在短时间内会感受可能减缓了发展步伐,但从长远来看,它比发布没有人想要的新功能更有效。

咱们使用的工具:GetFeedback,HipChat,JIRA Service Desk,Pendo,Surveymonkey,HootSuite

完善您的DevOps工具集

Atlassian的工具可在开发生命周期的每一个阶段提供跨团队协做支持。正如您所看到的,咱们利用同行构建的插件和单机工具加强咱们的DevOps工具集。

 

在小公司里,一个团队可能负责整个开发生命周期。在大公司里,是被各个部门承担的。不管如何,DevOps都可以打破僵局,使这个生命周期更快、高度自动化以及无缝协做 - 不管是跨职能团队仍是在一个团队中。

首先是选择正确的DevOps工具,最重要的是认真审视当前软件和IT操做过程,并决定须要改进的地方。我但愿这个清单能够为您指明正确的方向。