持续集成是现代软件开发中重要环节之一,它是指在软件开发过程中,将代码变更高效地集成、构建、测试、发布。持续集成的责任是帮助研发团队快速发现和纠正问题,提高代码质量,确保软件系统可靠和稳定的迭代,提高软件开发效率和质量,同时也是团队协作的重要工具。
持续集成能够为团队带来诸多好处。通过构建中的代码质量扫描能够尽早地发现问题,从而避免较严重的错误进入到主干分支中。其次,通过集成单元测试能够减少手动测试的工作量,提高交付效率。再次,还能够提升团队协作效率,缩短产品交付周期。
持续集成系统涵盖了很多业务子系统,包括代码准入、分支管理、代码评审、构建服务、单元测试、合规扫描等。这些子系统共同协作构成了一个完整的持续集成系统。
信也科技Aladdin持续集成平台,至今已构建超46w次,完成代码评审4.5w次,经过多次迭代升级,构建成功率高达99%,成为信也科技软件开发、质量体系中的核心工具之一,下文将着重对持续集成和分支管理两大模块进行介绍。
Aladdin平台整体架构如下:
Aladdin构建任务是下发到Jenkins主从集群中完成,其中针对于每种语言类型提供了对应的构建模板,以适配各种场景的构建任务,例如针对java站点分别提供了容器云应用构建,虚拟机应用构建,自定义构建,混合计算平台应用构建四种模板,以适配各团队不同的Java应用构建方式。
另外,其他每种语言的构建模式都有对应的构建模板。
由Jenkins执行构建任务存在一个隐患,即构建配置与Aladdin主服务分离,配置没有做集中化、持久化、版本化管理,在极端场景下可能出现丢失构建模板的风险,对公司业务迭代构成极高的潜在风险。
针对这个问题我们开发了构建模板管理功能。平台支持在Jenkins模板丢失的极端情况下,直接通过git托管的构建配置,以Xml文件进行创建构建任务:
用户提交代码时,常常会出现各种各样的问题导致构建失败,例如合并代码后存在编译问题,构建命令配置错误,依赖包版本错误等。以上问题在用户构建时才暴露,问题发现晚,研发返工导致效率降低。针对这种情况,我们对java站点增加了预编译检查。
获取到预编译结果后,当用户提交构建时,平台会根据当前构建的代码版本,检查对应的预编译是否通过,否则拦截构建任务。
在构建过程中,会遇到各种各样的失败原因,包括配置错误,代码错误,版本问题,插件问题等等,通过日志排查各种问题耗时耗力,我们对高频的错误进行解析、归因,提示出有效的错误原因,以及解决方案。
目前常见问题类型,如下:
构建失败原因自动归因效果如下:
经过以上功能的投产,当前Aladdin平台构建成功率逐步升高。
3.1 分支管理模型说明
Aladdin分支管理采用feature分支开发,release分支发布的模式。master分支存放最新代码,release分支发布时,代码不能滞后master分支。并做了相关发布校验,保证发布分支代码为最新。
分支管理模型
Aladdin平台提供了向上评审、增量评审两种评审模型,以满足不同场景下的代码评审:
feature分支使用向上评审模型存在的弊端:
为了适应多次评审一次合并的场景,aladdin提供了第二种评审模型:增量评审
经过治理,虽然构建成功率已经达标,但是在构建后发现代码问题,尤其是编译问题、语法不规范、使用高风险依赖包等,问题暴露还是存在滞后性。后期我们规划为研发人员提供IDE插件,在编写代码中实时扫描,发现代码不规范、依赖包不合规、编译失败等问题,并在IDE提交代码时进行拦截,以保证提前将问题暴露出来,进一步提升研发效率。
alger,信也科技后端研发专家,从事过自动化运维平台、用例管理平台、分布式压测平台、精准测试平台、持续集成平台的开发,目前主要专注持续集成平台的设计和研发工作。