DevOps可以看过是敏捷的扩展与延申,它的出现就是为了解决开发团队与运维团队的那条鸿沟,只要存在人工处理的方式担心的问题总会出现,同一段程序无论执行多少次相同输入的输出总是一致的,但是人的处理却不能保证,那么使用自动化改善协作的过程,鸿沟自然就跨越了,。那么开发团队与运维团队就可以为相同的目标与方向而努力。而组织架构也将演变成如下:
从上图也与开头的康威定律做了一个很好的呼应。
我是如何实施DevOps的?技术
这个角度是大家最乐意去关注的,在我们团队主要使用了以下技术,脚本什么的我就不花时间贴出来了,在我看来工具的使用,只要花点时间就能解决。
类型 名称持续集成 Jenkins
持续交付 Jenkins
源代码管理 Gitlab
云平台 阿里云
软件包管理器 私有Nuget
代码检查 Reshaper
容器化 Docker
分布式链路跟踪 SkyWalking
日志系统 ES+Filebeat+kibana
系统监控 Prometheus
原本代码检查想引入SonarQube代替人工检查+Reshaper,可惜于服务器资源不足。
对于一般的团队,我建议优先从Gitlab+Jenkins搭建好完成CI/CD,其次把日志系统给完善起来,这两者完成得越早,给团队带来的收益就越高,后续才会有更多的时间来完善整套技术体系,这是一个良性的循环。
人人延申出的就是团队与文化,经过上面的讲解大家都意识到软件工程就是一样多人协作的工作,只有团队目标一致,共同负责承担团队的项目,愿意一同与项目成长才能很好的实施DevOps。就像多匹马拉车一样,只有它们都有共同的目标的时候才能快速拉车到目的,如果他们一匹向东一匹西,只会让马车无法前行甚至四分五裂。
在我的团队,因为在招聘人员的时候已经进行过了筛选,所以在合作上非常的顺利,当然我也经常在例会和业余的时候都会给大家传达思想,让团队成员真正的从实际意义上去理解现在的做法。
对于已经成型的团队来说如何去落地呢?无非三种,激励、考核和逐步试行。如果有条件的公司可以设置奖金激励,如果有绩效考核的可以将DevOps实施纳入考核目标,如果两者都没的,那就选取团队里愿意改变的同事进行试行,使用过后都说好的那么更会有说服力。
流程为了落实了文化的改进与技术的使用的这个过程,我们需要科学的、有步骤、有计划的方式完成这项工作,并且可以让这套标准化的方式可以重复使用到其他项目上。
在我的团队是有产品、前端开发,后端开发、测试、运维组成的。我采用了原型模式+DevOps模式:
产品人员会优先使用Axure RP工具把需求整理产出原型并与需求方确认。
产品确认好的原型就是我们技术的输入,技术拿到需求后会做一次需求评审,主要是排查需求疑惑和确认需求目标。
需求明确后,由我使用Visual Project任务拆解与排期,任务会建立在我们的项目管理系统Redmine上,如果任务周期过程,我会拆分成多个可交付的短周期,一般会控制在2个星期内。
接到任务后,大家就跟根据自己的任务使用PowerDesigner数据库设计(早期是由我独裁设计,后期团队发展壮大了,就由业务负责人各自设计),在这个阶段,如果有新的服务与新的工具库需要部署,我就会正面与运维沟通让他把自动化给完成。
因为我们是前后端分离的,所以我们使用了Swagger减少了写接口文档的时间,所有任务是否完成以前端是否对接好接口为主导,前端对接好后,就会在Redmine修改自己的任务状态并新建一个测试任务给到测试。