基于Jenkins的开发测试全流程持续集成实践

简介: 本文介绍了我目前团队所在使用的持续集成全流程及一些重要插件的使用,虽然还很不完善,但初步解决了我所在团队在集成和发布上的一些痛点。随着后续对K8S的学习的深入,我会逐步引入阿里云K8S服务(ACK)进行微服务的容器编排以及持续集成的K8S化改造,希望到时再进行分享。

今年一直在公司实践CI,本文将近半年来的一些实践总结一下,可能不太完善或优美,但的确初步解决了我目前所在项目组的一些痛点。当然这仅是一家之言也不够完整,后续还会深入实践和引入Kubernetes进行容器编排,以及通过阿里云K8S服务进行高效的云上托管,希望对各位童鞋有一点用。

一、持续集成全流程介绍

  今年一直在开发我司的一个核心业务系统,一个还未上线的产品开发阶段,其中后端采用ASP.NET Core + 一系列开源组件开发微服务并且部署在Linux Docker中,前端采用React + Flutter开发Web和App。采用了Jenkins作为CI工具,继承了一堆插件Plugin实现了初步的持续集成全流程。

  下图就是我最近整理的一个目前的持续集成全流程图:

  可以看出,在开发测试环境我有3个环境:

  (1)DEV环境:用于dev分支的前后端开发联调,有单独的数据库

  (2)MT环境:用于release分支(现阶段我直接用的master分支,产品上线后不可取)的测试进行集成测试,有单独的数据库

  (3)DEV-AT环境:用于dev分支的自动化接口测试环境,即专门拿来跑自动化接口脚本的环境,有单独的数据库

  针对CI服务器,在开发测试环境我有个2个节点:

  (1)master节点:用于持续集成和部署等一般性构建任务

  (2)slave-at节点:专门用于跑自动化接口测试脚本构建任务

  推荐在Jenkins中为不同类型的构建任务设置不同的label,这样可以绑定不同类型的构建任务至不同的Node上执行,从而减少高峰时期master节点的负载压力。

二、ASP.NET Core CI流程部分

  我的后端微服务是基于ASP.NET Core开发的,采用了容器化部署至Linux服务器,之前有过一篇详细的文章介绍过《基于Jenkins Pipeline的ASP.NET Core持续集成实践》。

  在Jenkins中提供了Pipeline方便地进行构建流水线,在我的实践中主要是通过开发人员的每一次Check-In到git,触发一个Webhook到Jenkins中从而使持续集成构建任务开始执行:

  从图中可以看出,其经历了中台微服务的编译和单元测试 及 BFF(Backend for Frontend)服务的编译和单元测试来保障代码质量,当然前提是有足够的单元测试作为保护层,这也需要开发人员花时间为每个服务接口(或者高价值的部分)写单元测试!

  如果构建任务中有一个Stage失败了,那么此构建任务则认为失败,会给开发团队和Leader发送邮件告警:

  此外,我们还使用了一个用于大屏显示构建状态的插件—Build Monitor,在我们工作区后方的电视屏上会显示各个构建任务的实时状态,如果有任务失败了会变为红色:

  并且,Build Monitor还会将推进不可靠代码的提交者名字(git账号名字)显示在屏幕中的构建任务里边,方便大家查看谁的锅:

三、ASP.NET Core CD流程部分

  经过CI部分,就可以初步认为提交的代码已经经过了初步的验证,这时会进入部署部分的构建任务,在我的流程里会有开发联调环境的部署及接口自动化环境的部署。当然,除了API的部署也有Web的部署,我们可以将其写到一个统一的Pipeline中也可以分开两个Pipeline来写。

  下图是我的一个API的部署构建任务,其中会经历中台微服务的部署及BFF服务的部署,当然也可以部署至多个服务器:

  这里说一下,由于我目前并没有采用任何的容器编排工具,所以这里的发布就只是单纯的将release文件覆盖之后然后将docker暂停和重启。这样做的缺点是没有充分利用镜像的优点,无法实现版本的有效管理(比如回退)。

四、RobotFramework AT流程部分

  对于一个产品来说,质量很重要,而保证质量的辅助手段就是充分的回归测试。自动化接口测试使得回归测试成为可以频繁触发,也就能及时发现提交的代码对已有接口功能的影响。我们的AT是根据重要的业务场景来写的,而且我们也觉得AT应该写在那些主要业务流程的接口上面,才能显示出它的价值,而且AT的编写也是不小的工作量。

  我们使用的是RobotFramework,开发语言是Python。在开发人员提交代码并发布到开发联调环境时,便会自动触发AT环境的部署,部署无误后就会触发AT任务的执行,AT执行无误后才会自动Merge dev分支的代码至稳定的测试分支,之后测试再选择是否发布最新的更改至测试环境进行验证bug fix。

  下图是基于RF的AT构建任务的执行结果:

  下图是该任务的具体的输出信息,我们可以看到每个用例的执行情况:

  由于我目前对这块了解不多,后续有机会了解多点后可以介绍一点我们在AT方面的实践和规范。

五、小结

  本文介绍了我目前团队所在使用的持续集成全流程及一些重要插件的使用,虽然还很不完善,但初步解决了我所在团队在集成和发布上的一些痛点。随着后续对K8S的学习的深入,我会逐步引入阿里云K8S服务(ACK)进行微服务的容器编排以及持续集成的K8S化改造,希望到时再进行分享。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
5天前
|
机器学习/深度学习 人工智能 jenkins
探索软件测试中的自动化与持续集成
【10月更文挑战第21天】 在软件开发的生命周期中,软件测试扮演着至关重要的角色。随着技术的进步和开发模式的转变,自动化测试和持续集成已经成为提高软件质量和效率的关键手段。本文将深入探讨自动化测试和持续集成的概念、实施策略以及它们如何相互配合以优化软件开发流程。我们将通过分析实际案例,展示这些技术如何在实际项目中发挥作用,以及面临的挑战和解决方案。此外,文章还将讨论未来趋势,包括人工智能在测试领域的应用前景。
40 17
|
9天前
|
DataWorks 数据挖掘 大数据
方案实践测评 | DataWorks集成Hologres构建一站式高性能的OLAP数据分析
DataWorks在任务开发便捷性、任务运行速度、产品使用门槛等方面都表现出色。在数据处理场景方面仍有改进和扩展的空间,通过引入更多的智能技术、扩展数据源支持、优化任务调度和可视化功能以及提升团队协作效率,DataWorks将能够为企业提供更全面、更高效的数据处理解决方案。
|
18天前
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
37 5
|
18天前
|
jenkins 测试技术 持续交付
软件测试中的自动化与持续集成
在现代软件开发过程中,自动化测试和持续集成已成为不可或缺的组成部分。本文将深入探讨自动化测试和持续集成的重要性、优势以及如何有效实施它们以提升软件质量和开发效率。通过具体案例分析,我们将展示这些技术如何在实际项目中发挥作用,并讨论其面临的挑战及应对策略。
42 3
|
21天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
49 1
|
22天前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
37 2
|
23天前
|
监控 jenkins 测试技术
探索软件测试中的自动化与持续集成####
本文旨在探讨软件测试中自动化测试与持续集成(CI)的融合实践,分析其对提升软件开发效率和质量的重要性。通过深入剖析自动化测试的优势、持续集成的核心概念以及两者结合的最佳实践案例,揭示这一技术趋势如何重塑现代软件开发流程。文章还将讨论实施过程中的挑战和应对策略,为读者提供一套实用的方法论指导。 ####
|
1月前
|
运维 Devops jenkins
DevOps实践:持续集成与持续部署在现代软件开发中的作用
【10月更文挑战第42天】在快节奏的软件开发世界里,DevOps已经成为一种提升效率、确保质量和加速交付的重要方法。本文将深入探讨DevOps的核心组成部分—持续集成(CI)和持续部署(CD)—并展示它们如何通过自动化流程优化开发周期。我们将从基础概念讲起,逐步过渡到实际操作,最终通过一个简单代码示例来演示这一过程。文章旨在为读者提供清晰的指导,帮助他们理解和实现CI/CD流程,从而在软件开发领域取得竞争优势。
|
1月前
|
监控 前端开发 jenkins
Jenkins 在前端项目持续部署中的应用,包括其原理、流程以及具体的实现方法
本文深入探讨了Jenkins在前端项目持续部署中的应用,涵盖其基本原理、流程及具体实现方法。首先介绍了Jenkins的基本概念及其在自动化任务中的作用,随后详细解析了从前端代码提交到生产环境部署的全过程,包括构建、测试、部署等关键步骤。最后,强调了持续部署中的代码质量控制、环境一致性、监控预警及安全管理等注意事项,旨在帮助开发者高效、安全地实施持续部署。
59 5
|
22天前
|
Devops 测试技术 持续交付
软件测试中的自动化与持续集成:最佳实践与挑战
在快速迭代的软件开发周期中,自动化测试和持续集成(CI)已成为提高软件质量和加速产品上市的关键策略。本文探讨了自动化测试和CI的实施如何帮助开发团队提前发现缺陷、缩短反馈循环,并确保代码质量。我们将深入分析自动化测试的策略选择、工具应用以及面临的挑战,同时提供一些克服这些挑战的最佳实践。
31 0
下一篇
DataWorks