最近在担任公司部门的DevOps Champion的角色,一直觉得这个只是一个协调者的角色(而不是一个SME的角色),我的工作大概就是将每个项目的devops工具收集一下,然后用图表的形式去体现大家用devops的工具情况,再就是分享一下好的devops实践. 在我们部门里,我自己也是一个tech leader的角色,也带着两个项目在身上,我的项目可以说是部门的number one了,我们有自动化构建,部署,和部分自动化测试,在我收集的过程当中,有几个项目也说自己也都做好了自动化构建和部署,我也知道他们并不是实行的很好,但我就是找不出个问题来,另我非常的困惑, 前几天和我们的管理教练聊了以后,另我豁然开朗,其实做好这个工作,并不只是一个协调者,我还要推动整个部门的devops前进,就像敏捷实践一样,要让我们的问题暴露出来,让他们理解什么是持续集成,激发他们自己做持续改进。

我们是金融行业,众所周知,金融IT业是走得比较慢的,DevOps这个主题太大了,我们今天来聊聊持续集成吧,我们要是把持续集成做好了,说devops做好了一半也不出奇。

以前说起持续集成,我眼中就只有三个东西,自动化构建,自动化部署和自动化测试,然后就没了。难道我有这三个东西还没有达到持续集成吗?说你没达到,一点也不出奇,下面听我慢慢道来。

来说说我眼中的持续集成是怎么样的. 

1. 是否能自定义自己的流水线?

我相信,每个团队可能都有自己的流水线,比如有些会有sonar在里面,有些会有smoketest,等等之类,但团队是否能根据自己的需求去自定义自己的流水线呢?

我们之前用的buildforge是不可以自定义流水线的,现在用的Jenkins公司也不给我们自己定义pipeline的,我们是用了一个Jenkins的build pipeline插件将一个一个job连接起来的流水线,其中也自己写了不少的shell script去自定义我们的东西,在银行里搞devops真是道路曲折呀.

2. 开发人员提交代码后是否能得到快速反馈?即是否会运行JUnit去验证代码的正确性,部署后是否会运行E2E测试去验证代码的正确性.

敏捷的一个重要价值观就是持续反馈,但是怎么样实现呢?devops可以帮到我们,所以我们开发人员写完代码之后,能快速的运行JUnit, smoketest, E2E Test的话,这样才能快速给开发人员得到快速的反馈,同样,业务人员也可以要求部署团队尽快部署到UAT,快速在UAT的环境中得到快速反馈。 所以,如果在敏捷中得到快速反馈,scrum并没有告诉我们怎么做,但devops告诉我们,可以这样做 >_<

3.团队的JUnit的测试覆盖率是多少?

在TDD时候,我们是强调先写测试才写代码,但我们知道这样比较难行,因为太少公司能做到这样了,不过我们就因此不写JUnit了吗?不,我们要写,我们不得不写,但写多少呢?根据Mike Cohn的测试金字塔,JUnit的比例要达到80%,你的JUnit覆盖率达到了吗?

4. E2E的测试覆盖率是多少?(有些团队还会做服务测试0)

有这么多的JUnit我们还需要E2E测试吗?我们需要,当我们部署完后,我们需要运行一下E2E测试,以确保我们的系统是可以照常运行了,比例是多少呢?还是测试金字塔,Mike Cohn告诉我们是5%到10%,我们需要E2E测试,但我们并不需要太多,因为E2E的测试用例是成本比较大的.

5. DEV,SIT和UAT的部署是否是同一个二进制文件(即是否用同一个jar/war/ear去部署的)?

用同一个二进制包进行部署,我相信开发人员对这个深有体会,很多时候我们会遇到这样一个问题,明明在本地可以的呀,为什么上到SIT就不行了, SIT还是可以的呀,UAT怎么可能出问题呢?我加入这个项目前,我们的maven是用了profile的一个功能,对不同的环境运行不同的maven命令,这样打出来的二进制包是不一样的,就是说每个环境用的都是不一样的package,天哪,这不是反天理吗?后来我就将环境的property放到外面去了, 这才解决这个问题。所以确保每个环境使用的是相同的package,尤其要和production的要一样,否则出了问题的时候,你会很难发现是哪里出了问题。

6. 多久进行一次SIT部署和测试?

这里根据我的项目特点,我们是要求手动SIT部署,因为开发人员提交代码后,我们会执行DEV部署和DEV E2E测试,因为我们不知道开发人员什么时候提交代码,所以这样的话,我们的DEV环境就会非常的不稳定,当在部署的时候,DEV是不可用的,测试人员是在SIT测试的,所以为了保持稳定的环境,我们会对SIT进行手动控制。

7. 多久进行一次UAT的部署和测试?

为什么会有这一项呢, 因为通常QA或者用户是在这个环境测试的,如果UAT足够频繁,这说明你的产品被验证得越频繁,你的产品则越能得到快速的反馈。

最新文章

  1. Http状态码之:301、302重定向
  2. WCF学习之旅—基于ServiceDebug的异常处理(十七)
  3. ns3 print 丢包内容的两种方法
  4. Linux下的Finger指令
  5. React Native开发技术周报1
  6. SQL高级查询技巧(两次JOIN同一个表,自包含JOIN,不等JOIN)
  7. 不均匀的Windows处理器编组
  8. 在xib里,拖一个UIView到UITableView中作为tableHeaderView
  9. SVG 是什么?
  10. EXCEL处理数据小技巧
  11. selenium python (一) 开发环境搭建
  12. range与xrange之间的差异(转)
  13. css渐变/背景
  14. JVM类加载过程学习总结
  15. Beego学习笔记——Logs
  16. VB调用WebService(SOA2.0接口)(直接Post方式)并解析返回的XML
  17. Spring整合Struts2,Hibernate的xml方式
  18. vue.js之获取当前点击对象(其实是套着vue的原生javascript吧,笑&#128522;)
  19. Lost connection to MySQL server during query,MySQL设置session,global变量及网络IO与索引
  20. js 模拟css3 动画1

热门文章

  1. KUKA机器人常见十大问题及解决方法
  2. mysql 多字段更新
  3. prisoners-of-war|
  4. CF-1111C-Creative Snap
  5. MongoDB的初级安装和使用
  6. tomcat一闪而过
  7. 在中国实现自我价值的英国研究员——微软亚洲研究院英国籍研究员Darren的7年之路
  8. Java equals和==的理解
  9. Microsoft Hyperlapse——让第一人称视频更快更流畅
  10. mysql-5.7.25解压版本安装和navicat 12.1版本破解-4.8破解工具