CI 失败的五大原因

本文讲的是CI 失败的五大原因【编者的话】本文介绍了CI失败的五个原因,包括错误的CI服务的选择、业余的CI工程师、随意更改CI服务器配置、CI服务器性能差、缺乏管理等。

【深圳站|3天烧脑式Kubernetes训练营】培训内容包括:Kubernetes概述、架构、日志和监控,部署、自动驾驶、服务发现、网络方案等核心机制分析,进阶篇——Kubernetes调度工作原理、资源管理及源码分析等。

敏捷软件开发必须辅以有效的持续集成(CI)。CI就是持续进行分析、构建、测试和部署的流程。在发布到生产系统之前,CI会检查代码质量和测试产品的业务逻辑。

理想情况下,当构建失败时,我们是不能允许软件继续发布到生产上。但是,持续集成的理念并未贯彻到每一个敏捷团队。有些团队非常严肃地对待CI实践,有些只是为了敏捷而做,有些则完全忽略CI流程,甚至有的连CI服务器都没有搭建。

有很多种原因导致团队忽视CI流程。工作有不同的优先级,产品经理不理解代码质量,测试流程和完整构建的重要性。技术经理无法分配足够的时间实施CI或者修正出问题的CI。产品和技术管理层互相不理解各自的优先级以至于最后部署的是构建失败的产品。

这个方法短期看没什么问题,但其实非常危险。可能会导致产品有严重的缺陷,从而影响业务运作。这种影响是不可预测的,可能是金钱的损失,也可能是企业声誉,最极端的可能导致整个业务完全流失。

然而,即使产品经理和技术团队愿意投入时间和金钱来实施CI和修正CI问题。一些团队还是从未成功。我们在这里讨论一下CI失败的5大原因和克服这些困难的推荐解决方案。

1. 错误地选择CI服务器

市场上有很多种持续集成工具。CI服务器可以在云端也可以在本地。这里可以推荐一堆CI服务器

Jenkins是其中之一,但过去人们都盲目地使用它。为了适应Jenkins,我们时常不得不更改项目妥协。现在,情况有所改变,市场上出现了多种不错的CI服务器。面对如此众多的产品,选择适合自己所需的的确是一项挑战。

搭建CI服务器需要耗费大量的时间和金钱。如果没有提前研究就贸然决定,那么前期的投入都付之东流。管理层经常犯的一个错误就是选择一款通用型CI服务器或者适用于所有平台的服务。设想一下,你的应用包含Web网站、IOS app、Android app,用一个通用CI并不是一个很好的办法。我们必须非常小心来选择CI服务器。

推荐解决方案

  • 仔细研究市场并通过实验权衡各种选项。Slant上已经对主流的各种CI产品有优劣评估。
  • 关注特性,例如容器支持,平台支持,易用型,可用性等等。
  • 不要为了试图省钱采用一款通用的适应所有平台的CI产品,每一个平台都有不同的技术需求和挑战
  • 和团队讨论并借鉴过去的经验。

2. 业余工程师

在敏捷团队的每一位工程师都有很强的编程能力。但仅仅是是写代码和测试代码是不够的,还需要搭建环境的能力,运行命令行和编写脚本的技能,还要具有对各种构建工具和软件包管理工具的扎实的知识。

最近,很多公司都开始讲IT架构迁移上云,所以还需要 Devops 技能。例如,AWS、AZure、Heroku,各种配置工具例如:bash、Ansible和 Chef,还有容器Docker and Kubernetes。最重要的是要具备至少一种脚本编程能力,比如Bash、Ruby或者Python。

这当然并不意味者你需要学所有的东西,但你需要了解平台上的所有东西。假设一位从事IOS开发的工程师,他就需要了解各种相关的工具例如:Cocoapods、Carthage和Swift Package Manager。

还有用于构建的工具,例如在APPLE 命令行工具之上的Fastlane、Rake和Make。

术业有专攻,有些工程师擅长基本编程语言,比如 Java、Objective-C和Swift,并且对DevOps相关的各种工具相当熟悉。 有些工程师则习惯于使用IDE环境开发(比如Eclipse、IntelliJ和Xcode),他们不太熟悉使用终端敲入命令。还有些工程师擅长构建工具但写程序代码则弱一些。

所谓业余工程师是指那些只会在IDE环境下编程,不会使用命令行和脚本工具的人,他们只喜欢使用GUI去做事而抗拒使用命令行或脚本。但是,CI服务器并没有GUI,所有的事情都只能用脚本来完成。

如果你的团队有这类人,那CI就永远不可能成功,他们可能会开发一些质量低劣的自动化脚本,然后大家的时间都花在差错,该机和CI服务器切换上,而不是真正构建对业务有意义的功能。

推荐解决方案

  • 招聘具有CI和DevOps基础知识的工程师。
  • 培训工程师,最好的办法是送他们去外面培训或者请内部有经验的CI专家培训。
  • 短期招聘一些CI专家来建立CI流程和分享经验

3. 随意更改CI服务器配置

许多CI服务器允许用户通过Web界面去更改CI服务器配置。这个方法对工程师而言的确比较方便。但是经常更改CI配置也会产生很多问题,比如把一些很重要的步骤错误地忽略掉。而且,如果每个人都有权限在上面更改的话,最后就搞不清楚谁,什么时间做了什么更改。当查错的时候,都需要花费大量的时间。经常性地更改CI服务器会导致很多问题。

推荐解决方案

  • 把配置文件,脚本和其他相关文件都放到代码库集中管理。
  • 避免手工更改CI 服务器的配置。
  • 控制访问CI 服务器的权限。
  • 不允许用户更改一些特定的构建步骤。

4. CI服务器性能差

在开发过程中,程序员需要经常更新代码,这会不停地在CI服务器上触发重构流程。这意味着CI服务器需要不断地运行大量作业。例如从远端服务器下载,备份数据库,运行Docker容器等等,所以CI服务器必须快速,可靠,网络稳定。低配的CI服务器会影响整个构建流程,导致时间延长,测试时断时续,从而浪费大量的时间。

推荐解决方案

  • 采用高配服务器。
  • 不要在CI服务器上安装不必要的软件。
  • 不要把CI服务器挂在Wifi上。
  • 科学地调度在CI服务器上跑的作业。
  • 不要手工安装软件。
  • 避免使用GUI连接 CI 服务器,使用SSH足够了。

5. 缺乏管理

项目管理在整个CI实施中起到关键作用。必须对整个构建流程设定严格的指引,同时对任何不遵守指引的行为零容忍。在任何情况下都不能发布CI流程中断的软件。任何构建中断都要被视为紧急事件并以最高优先级进行修复。很多技术经理可以做到这一点,但一些没有CI经验的管理人员可能会命令继续开发而不顾代码质量。如果这样管理,CI实施则不可能成功。

推荐解决方案

  • 建立CI流程并严格执行。
  • 培训项目经理并用于CI实施。

总结

在敏捷团队中实施CI是非常挑战的,但是遵循严格的规则并避免一些常见错误可以有效地实施CI流程。你的经验如何?你觉得CI流程有效吗?欢迎大家评论!

原文链接:Top 5 Reasons for CI Failure(翻译:杨川)

原文发布时间为:2017-05-14

本文作者:杨川

原文标题:CI 失败的五大原因

时间: 2024-09-25 05:24:00

CI 失败的五大原因的相关文章

物联网碰壁后,这位创业者总结失败五大原因

物联网碰壁后,这位创业者总结失败五大原因 猎云网 (文/猎云网) 2015-06-18 33 创业创新 智能设备 360推广 猎云网6月18日报道  (编译:小白) 注:Yash Kotak是印度初创公司FundaMine的联合创始人,与几位合伙人在物联网领域创业失败后细数了团队所犯下的错误.以下为其创业历程和总结: 从白手起家开始设计制作物联网硬件产品到获得天使融资,连续五个月每天疯狂工作14小时之后,我和另外两个联合创始人忽然有一天从梦中惊醒! 我们的产品似乎根本没有市场!这个残酷的现实硬生

网站受到搜索引擎惩罚寻找五大原因总结

不得不承认SEO工作的琐碎.繁重.以及需要持之以恒的工作态度偶尔也会给SEO工作者带来种种莫名奇妙的失落感,因为这就是SEO.SEO需要坚持,需要琢磨,需要实践,需要技巧--失落感并不可怕,工作中难免会偶尔的情绪化都算是正常的,然而却万不可对工作抱有失望,一旦对SEO工作丧失信心.对网站没了信心,那就是等于对自己没了自信!SEO工作每天都在跟搜索引擎打交道,正因如此,搜索引擎无形中也再不断的改变对网站排名的算法,然而网站偶尔受到搜索引擎的惩罚也在所难免.一旦网站受到搜索引擎的惩罚,关键词排名一落

无线网络连接不上的五大原因和解决办法

笔记本电脑无线网络连接不上的五大原因和解决办法:无线網絡的发展和普及尤其是无线局域网丰富了我们的生活,让我们的生活变得越来越便利了.同时提供随时即用.高速优质的網絡服务.但是.由于无线信道特有de性质.使得无线網絡连接具有不稳定性.大大影响了服务质量.你是否经常遇到自己笔记本电脑连接不上无线網絡.而其它笔记本电脑却可正常连接de情况.今天.笔者就以飞鱼星路由器为例具体介绍原因及解决办法. 第一.启动混合模式 设置无线路由后.若新de笔记本电脑(11n无线网卡)可以连入无线網絡.旧de笔记本(11

WIN XP出现“延缓写入失败”错误的原因和解决办法

问:电脑用的是双硬盘,最近系统任务栏弹出一个错误提示信息,提示延缓写入失败,然后在我的电脑中,D盘和G盘消失了.重启后,所有分区都可见,但对D盘或G盘中的数据进行操作时,系统就会假死.蓝屏重启.这是为什么? 答:"延缓写入"是操作系统的一项功能,在对硬盘有写入操作时,如果当前硬盘正忙,可以将待写的数据存到缓冲区,等到硬盘空闲了再写入,因此这 是一项可提高系统性能的措施.出现"延缓写入失败"错误的原因有很多种,可能与硬件.软件.系统以及BIOS都有关系,建议你先重新插

客户端认证-做安卓客户端登陆程序时老是出现url认证失败是什么原因?

问题描述 做安卓客户端登陆程序时老是出现url认证失败是什么原因? 用Eclipse写客户端登陆程序,在使用时发现老是出现URL认证失败,是什么原因呢, 客户端的程序是这么写的:(用的tomcat作为服务器)在Eclipse 进行调试的 String urlStr = "http://192.168.1.101:8080/login/LoginServlet";

安卓虚拟机网络访问失败的可能原因

问题描述 安卓虚拟机网络访问失败的可能原因 关于一个查询手机归属地的简单DEMO,我的电脑上的虚拟机运行就说访问失败,我把程序打包拷贝到同学电脑上的虚拟机上就运行成功.主程序部分代码如下.(肯定不是权限什么的问题了,因为都是同一个程序) public void query(View view){ String number=et_number.getText().toString(); try { String address=queryservice.getAddress(number); T

多文档应用程序-mfc 多文档添加模板新建文档视图,新建空文档失败是什么原因啊?

问题描述 mfc 多文档添加模板新建文档视图,新建空文档失败是什么原因啊? MFC中在多文档应用程序中,新建一个空文档失败,跟踪后确定是在pDocTemplate->OpenDocumentFile(NULL);函数中createnewframe()函数创建新的frame再调用CMDIChildWnd::Create()函数,在其中 HWND hWnd = (HWND)::SendMessage(pParentWnd->m_hWndMDIClient WM_MDICREATE 0 (LPARA

批处理-在server2003里面调用PsExec失败,可能原因是什么?

问题描述 在server2003里面调用PsExec失败,可能原因是什么? 自己写了一个程序,主要功能是调用PsExec这个小程序远程执行客户端的程序,之前是用批处理写的,现在用C#加了个小界面出来,关键语句是 p.StandardInput.WriteLine(path + "\" + "psexec.exe \" + ip + " -i c:McAfeeUpdate.exe"); // Cmd 命令 p.StandardInput.Write

sharesdk-集成mob第三方分享sdk,分享到朋友圈失败是什么原因

问题描述 集成mob第三方分享sdk,分享到朋友圈失败是什么原因 集成mob第三方分享sdk,分享到朋友圈一闪失败了是什么原因,我需要去微信平台集成一个微信的appid吗 解决方案 需要你去微信开发平台申请个 微信分享需要你配置信息和你微信开发平台的一致,而且需要你生成APP测试 解决方案二: http://www.bkjia.com/Androidjc/979960.html 解决方案三: 需要你去微信开发平台申请个 微信分享需要你配置信息和你微信开发平台的一致,而且需要你生成APP测试 解决