最近在担任公司部门的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足够频繁,这说明你的产品被验证得越频繁,你的产品则越能得到快速的反馈。

DevOps - 持续集成的更多相关文章

  1. 构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境

    构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境 整个环境的结构图. 一.准备工作 gitlab和harbor我是安装在kubernetes集群外 ...

  2. DevOps - 持续集成(Continuous Integration)

    1 - 持续集成简介 持续集成(Continuous integration,简称CI)是软件的开发和发布标准流程中最重要的部分. 作为一种开发实践,在CI中可以通过自动化等手段高频率地去获取产品反馈 ...

  3. devops持续集成

    目录 Devops 版本控制系统 Git安装 Git使用 git四种状态 git基础命令 git分支 git合并冲突 git标签 git命令总结 Github使用 创建仓库 HTTP协议 SSH协议 ...

  4. devops持续集成,Centos7.6下gitlab+jenkins(pipeline)实现代码自动上线

    持续集成 gitlab+jenkins(pipeline)实现代码自动上线 环境准备:Centos7.6版本ip:192.168.0.13 主机名:gitip:192.168.0.23 主机名:jen ...

  5. 【下一代核心技术DevOps】:(五)微服务CI与Rancher持续集成

    1. 引言 DevOps的核心魅力是快速的持续集成交付,降低研发和实施运维之间的交互,使得传统的各种扯皮现象统统消失.最重要的是降低成本 保障产品交付可靠性. 使用Rancher作为持续集成的关键环节 ...

  6. 03 持续集成和部署/基础设施 - DevOps之路

    02 持续集成和部署/基础设施 - DevOps之路 文章Github地址,欢迎start:https://github.com/li-keli/DevOps-WiKi 服务的持续集成和部署这里有两套 ...

  7. [dotnet core]落地微服务特色的DevOps管道,持续集成/部署到kubernetes。

    目录 前言 目标 工具 - 最小的学习成本 方案 - 愿景 1. 持续集成 - CI 2. 持续部署 - CD 部署环境 1. 部署gitlab-runner 2. 注册gitlab-runner 搭 ...

  8. 在推送提交之后阻止Azure DevOps (TFS)持续集成

    在Azure DevOps服务器上配置生成定义时,可以配置连续集成(CI)生成.每次签入或提交到源代码库时都会自动运行一个CI构建.这种机制允许开发人员启动一个自动化的过程,例如编译和部署构建.这是一 ...

  9. Android Studio 集成 TFS,实现安卓移动开发的持续集成和交付(DevOps)

    目录 1 集成TFS系统.... 1.1 概述.... 1.2 安装TFS插件.... 1.2.1 在线安装方式.... 1.2.2 离线安装方案.... 1.3 常见操作.... 1.3.1 新建G ...

随机推荐

  1. zabbix 使用邮件发送告警信息

    配置系统mail命令,使其可以发送外网邮件 mail 命令配置 修改zabbix_server配置文件,使其可以执行告警脚本 [root@rexen etc]# vim /usr/local/zabb ...

  2. OLED带来全新视觉体验

    2013年1月,在国际消费电子展(CES)上世界首款曲面OLED电视--LG OLED电视亮相,LG Display将曲面与OLED完美结合的面板技术让显示设备的外观和品质都达到了一个全新的高度,惊艳 ...

  3. FPGA基础架构总结

    1.为什么FPGA的整体逻辑的速度有限制? 与ASIC相比较,AS指的是(application specific)专用集成应用,而FPGA是可编程逻辑,在实现的过程中,AS是直接用最基础的逻辑门实现 ...

  4. spring mvc +@Valid +@RequestBody 来做参数校验返回400,并且不显示具体message 如何解决

    参考文档: https://www.oschina.net/question/115867_2282711   谢谢原作者

  5. python心得二(编码问题)

    内容编码 字码发展1.ascii(只识别英文)8位就可以表示所有英文,字符数字,1个字节就可以 2.unicode(万国码)最少两个字节中文三个字节 3.utf-8万国码存在空间浪费英文8位中文24位 ...

  6. 洛谷 P1220 关路灯 题解

    Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...

  7. 吴裕雄--天生自然python学习笔记:Python3 SMTP发送邮件

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. python的smtplib提供了一 ...

  8. mysql中事务的并发问题与隔离级别

    回归一下事务的四大特性ACID 1.原子性(Atomicity) 事务开始后所有操作,要么全部做完,要么全部不做.事务是一个不可分割的整体.事务在执行过程中出错,会回滚到事务开始之前的状态,以此来保证 ...

  9. 关于Git的版本控制

    1.关于版本控制? 版本控制是一种记录文件或文件集随时间变化的系统,以便您以后可以调用特定版本,如果您是图形或Web设计人员并希望保留图像或布局的每个版本(您肯定希望这样),则使用版本控制系统(VCS ...

  10. C++ 标准IO

    标准输入 gets() 1 char * (char *str) gets() 主要是从标准输入流读取字符串并回显,读到换行符时退出,并会将换行符省去. 返回值为获得的字符串的首地址. 123 cha ...