最近在担任公司部门的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. G 小石的图形

    题目链接:https://ac.nowcoder.com/acm/contest/949/G 思路: 思路是很简单,一个小学数学题.但是n次WA后才过,重点就在pi的表示上,pi最精确的表示方式是ac ...

  2. java实现银行管理系统

    Bank类 package First; import java.util.TreeSet; //银行类public class Bank {        private String Bankna ...

  3. Qt QImag图像保存、格式转换

    图像保存bool QImage::save(const QString &fileName, const char *format = Q_NULLPTR, int quality = -1) ...

  4. 重复测量的方差分析|Mauchly's Test of Sphericity|

    生物统计学-重复测量的方差分析 之前的方差分析应用条件要求组之间是独立的,即某种因素下相同时段测量的结果数据,但4月与5月数据是有关系的,所以必须考虑某种因素下不同时段测量的结果数据,即使用重复测量的 ...

  5. 对《java程序员上班那点事》笔者对数组占用内存质疑

    1.<java程序员上班那点事>笔者对数组占用内存的描述 2.实际测试情况: /** * 测试一维数组占用内存 */ public static void testOneArray() { ...

  6. 用JSON报的一个错误java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeExcep

    以前在做项目的时候就曾接触过JSON的技术,但那个时候是项目经理把所有该配制的都配了,工具类也提供了,如何使用也跟我们说了,那个时候只是觉得很好用,倒没有研究过. 今天自己写了一个JSON的例子,可以 ...

  7. 3DSMAX卸载/完美解决安装失败/如何彻底卸载清除干净3DSMAX各种残留注册表和文件的方法

    在卸载3dsmax重装3dsmax时发现安装失败,提示是已安装3dsmax或安装失败.这是因为上一次卸载3dsmax没有清理干净,系统会误认为已经安装3dsmax了.有的同学是新装的系统也会出现3ds ...

  8. python3多进程爬虫(第二卷)

    上卷中讲到,我有4个进程,可是我要同时爬取20+数据怎么办,很明显上卷的语法公式不可以,所以现在我引入线程池 现在看一下线程池的语法 看一下爬虫: 注意圈中重点

  9. 将js进行到底:node学习1

    废话:自高中以来一直对编程充满激情,磨剑五年,如今要毕业了,我不想用我已经擅长的知识敷衍,而想以一个全新的领域去面向我的毕设--是时候学习一下node.js node.js基础 对于JavaScrip ...

  10. bind(this)作用

    .bind()创建了一个函数,当这个函数在被调用的时候,它的 this 关键词会被设置成被传入的值(这里指调用bind()时传入的参数