现今,人们的生活习惯发生了翻天覆地的变化,一边在高呼拥抱互联网,一边又在痛斥它给人们带来便捷生活的时候自己没有赶上创业潮流,中国人的人群效应恰巧对应了这点:“我看不惯你,又干不掉你”,最后就只能臣服于互联网的驱动下。默默收起泪眼婆娑的羡慕,转战这个怪圈。传统的IT部署依然满足不了这个时代的需求,云计算的出现,更使得企业转型迫在眉睫。
新致云开发团队顺应自动化的时代潮流,结合敏捷开发、持续集成、持续部署等先进理论在团队协作领域掀起了全新的自动化浪潮。早期新致云项目组的团队协作依赖于较多的人工操作,而人工操作的缺点显而易见,沟通信息的失真、重复繁琐的劳动都造成了大量时间成本的浪费以及作业效率的降低。引入自动持续集成的概念后,开发和测试人员可以解放大量的人力劳动。不仅使得代码的质量可以得到更好的保障,在部署和监控方面也可以做到更加人性化和可视化。本编着重探讨持续集成中自动化代码质量检测。
代码质量门——SonarQube
试想一下:一个开发团队如何在人员持续流动且不稳定的情况下,快速交接现有代码?如何保证写下的代码没有潜在的问题和技术债务?显然,良好的代码规范和质量审查必不可少。SonarQube是一款优秀的开源代码管理平台,可以进行持续的代码分析和代码质量检测,帮助开发人员发现逻辑问题之外的技术BUG和潜在的隐患。
除此之外,自动化则将SonarQube的分析过程以自动化的方式执行,同时依托Jenkins自动化服务管理,使得我们可以针对开发团队开发出一整套代码测试与质量分析的产品。使用者完全不必关心测试环节的具体过程和繁琐的配置,只需要关心测试的结果即可。
基于这种情况,自动化集成在团队敏捷开发的要求下显得尤为重要,开发人员每天都要交付功能代码以响应快速迭代的需求,若代码质量完全依靠人工则会使得工作量过于庞大,造成开发压力,如果使用这一套自动化流程可以大幅提高开发人员的交付能力。
工作环境:
以分布式版本控制的工作模型为例,项目代码由中央和分支仓库管理。中央仓库由项目拥有者维护,开发者拷贝中央仓库并创建自己的个人分支,在个人分支上进行工作,阶段工作完成之后向开发分支(假如叫做dev分支)中央库以Pull Request的方式合并代码。
Pull Request(PR):
开发人员请求代码拥有者“pull”有变动的代码,代码拥有者可以对贡献的源码进行review,并决定是否合并到中央库的主分支(在git中通常是master分支)。代码开发人员创建PR来通知项目拥有者代码变更,有些服务如Github,Bitbucket,Gitlab提供了PR的评论功能。评论可以作为触发测试的条件,也可以作为测试结果的展示。
说了那么多的自动化集成的工作,很多开发工程师也许还在疑惑,我们现在的敏捷开发已经深入到各大行业,但是如何检验所属的工作环境是优质的呢?
工作流程:
依托Jenkins自动化服务管理,开发者可以在早晨上班时将代码更新至dev分支的最新提交,并在一天的开发完成后在代码管理工具Github,Bitbucket,Gitlab上创建PR,这个过程会触发Jenkins的任务。该任务会拉取PR中源分支的最新的代码执行编译、单元测试以及代码分析,之后发送报告邮件给代码提交者和代码拥有者,并且将Jenkins的构建结果作为一条评论创建到PR中,代码拥有者来决定是否合并。
操作流程(以Stash为例):
插件:
1.stash中需要安装Bitbucket Server Webhook for Jenkins插件。用于在代码提交之后触发Jenkins Job的构建操作。
2.Jenkins中需要安装SonarQube Plugin。用于在代码构建之后进行分析。
3.Jenkins中安装Stash pullrequest builder plugin。用于监听pull-request中源分支的变化,并构建该分支。
步骤
1. 在Jenkins中建立两个job,一个是构建job,另一个是邮件Job。
2. 配置Stash pullrequest builder plugin。实现当pull-request中的源分支发生变化(有代码提交)时,Jenkins自动触发该build。
3. Build流程:在buildjob中拉取代码。通过git命令获得代码提交者的邮件,提交时间等。存入公共文件。文件规则可以自行拟定。(遇到Jenkins存在节点的情况,可以使用NFS挂载的方式实现文件共享。)
4. build项目,并使用SonarQube进行代码分析。分析结果会输出在Jenkins控制台。
5. 在emailjob中,读取公共配置文件。读取收件人信息,邮件标题,Jenkins任务名,构建号等。通过Jenkins CLI读取上一步中控制台的内容,提取相关信息作为邮件正文。
6. 发送邮件。
7. jenkins向stash返回构建结果和连接,作为pull-request的一条评论,供leader审核。由leader审核代码并决定是否合并代码。
总的来说,在项目中,开发人员会遇到各种各样的问题,自动化集成在项目开发中和应用中越来越重要,既减轻了开发难度,又提高了项目交付能力,从产品需求出发,利用自动化管理流程,使得敏捷开发优势最大化。