坦白的讲:世界上没有哪种工具能够像DevOps这么神奇(或敏捷,或精益)。DevOps在开发和运营团队之间建立了完美的合作与沟通,因此与其说这是一种神奇的工具,不如说是一种文化的转变。
然而,团队之间也拥有支持自动化和协作的工具及技术。经常有人问我们在Atlassian时关于支持DevOps工作方式所用到的工具(除了我们自己)。所以,我准备拟定一份购买指南,标明购买DevOps工具时所需要的东西并且告知您我们团队所用到的工具。
尽管许多工具都能以这种或那种的方式在开发周期的各个阶段发挥作用,但没有一种工具能在每个阶段起到主要作用。所以,当我们谈及DevOps工具时,将其分解到各阶段是很有帮助的。我将其分解成:规划、构建、持续集成、部署、运营以及持续反馈。
1. 规划、2. 构建、3. 持续集成、4. 部署、5. 运营、6. 持续反馈
1. 规划
视觉与设计方面达成协作
根据敏捷手册中的内容,我们推荐使用在规划中允许您的开发团队实现迭代的工具。这样,您就能很快地从用户那里获知情况,并通过用户反馈优化产品。寻找能够提供sprint规划特点的工具。
另外,优先考虑为您的开发团队持续收集用户反馈,并加以组织形成可执行信息。寻找可以支持“异步讨论”的工具(如果您愿意)。重要的是每个人都可以分享并发表评论:想法、策略、目标、需求、路线图以及文档。
不要忘记整合。无论您决定将功能或项目开发到多大范围,都应当将用户想法列入您的开发列表。
我们使用的工具:Confluence, HipChat,JIRA Software
2. 构建
开发的阶段环境
虽然Puppet和Chef主要受益于运维,但开发人员通过工具来提供各阶段的开发环境比如Docker。虚拟编码和可支配的产品副本可以帮助您完成更多工作。
一些奇怪的类路径?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操作过程,并决定需要改进的地方。我希望这个清单可以为您指明正确的方向。