理想情况下,当构建失败时,我们是不能允许软件继续发布到生产上。但是,持续集成的理念并未贯彻到每一个敏捷团队。有些团队非常严肃地对待CI实践,有些只是为了敏捷而做,有些则完全忽略CI流程,甚至有的连CI服务器都没有搭建。
有很多种原因导致团队忽视CI流程。工作有不同的优先级,产品经理不理解代码质量,测试流程和完整构建的重要性。技术经理无法分配足够的时间实施CI或者修正出问题的CI。产品和技术管理层互相不理解各自的优先级以至于最后部署的是构建失败的产品。
这个方法短期看没什么问题,但其实非常危险。可能会导致产品有严重的缺陷,从而影响业务运作。这种影响是不可预测的,可能是金钱的损失,也可能是企业声誉,最极端的可能导致整个业务完全流失。
1. 错误地选择CI服务器
搭建CI服务器需要耗费大量的时间和金钱。如果没有提前研究就贸然决定,那么前期的投入都付之东流。管理层经常犯的一个错误就是选择一款通用型CI服务器或者适用于所有平台的服务。设想一下,你的应用包含Web网站、IOS app、Android app,用一个通用CI并不是一个很好的办法。我们必须非常小心来选择CI服务器。
推荐解决方案
- 仔细研究市场并通过实验权衡各种选项。Slant上已经对主流的各种CI产品(https://www.slant.co/topics/799/~continuous-integration-tools)有优劣评估。
- 关注特性,例如容器支持,平台支持,易用型,可用性等等。
- 不要为了试图省钱采用一款通用的适应所有平台的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 服务器的配置。
- 控制访问CI 服务器的权限。
- 不允许用户更改一些特定的构建步骤。
4. CI服务器性能差
推荐解决方案
- 采用高配服务器。
- 不要在CI服务器上安装不必要的软件。
- 不要把CI服务器挂在Wifi上。
- 科学地调度在CI服务器上跑的作业。
- 不要手工安装软件。
- 避免使用GUI连接 CI 服务器,使用SSH足够了。
5. 缺乏管理
推荐解决方案
- 建立CI流程并严格执行。
- 培训项目经理并用于CI实施。
总结
本文链接:http://www.yunweipai.com/19864.html