研发效能认证学员作品:快速进行持续集成应用实践丨IDCF

作者:赖嘉明 研发效能(DevOps)工程师认证学员

随着数字化转型的推进及市场竞争的加剧,越来越多的企业也意识到持续集成的重要性。

而持续集成作为一种先进的软件开发实践和工具链,可以帮助企业实现自动化构建、集成和测试,减少开发周期和风险,并提高软件质量和团队协作效率。

将通过实践经验,介绍探讨传统企业在持续集成方案的应用实践。

一、背景

1.1实现持续集成时面临一些独特的应用需求:

1)具有复杂的IT基础设施,可能包括不同的应用程序、数据库和平台、闭环部署环境

2)实施持续集成的需要考虑的到安全性和合规性,保护企业数据和客户信息

3)相对保守的公司文化和固化流程

1.2常见研发过程痛点:

大部分的传统企业在研发过程仍然使用传统的开发模式——瀑布开发,从而可能遭遇的痛点问题:

1)人为操作多、等待环节时间长

2)构建环境不一致,项目交接构建异常

3)代码质量低,后续开发和维护的困难

4)集中提交代码,问题定位难

二、持续集成技术介绍

2.1 持续集成基本概念

持续集成(Continuous Integration, CI)是一种软件开发实践,其目标是在开发过程中频繁地集成和测试代码。它旨在通过自动化构建、测试和部署的方式,帮助开发团队更快、更频繁地交付高质量的软件。

2.2 持续集成的自动化

持续集成的自动化是实现持续集成实践的关键,它包括以下几个方面的自动化:

自动化版本控制:使用版本控制工具(例如Git)来管理代码的版本,并通过自动化地进行代码的提交、分支管理和合并,保证代码的版本控制过程的自动化。

自动化代码构建:通过构建工具(例如Maven、Gradle)或持续集成工具(例如Jenkins、GitLab CI/CD)自动化执行代码构建过程,将代码编译、打包、生成可执行文件等操作自动化完成。

自动化代码检查(静态代码检查):通过使用代码质量工具(例如SonarQube、Checkstyle)对代码进行静态分析,自动检查代码质量、代码规范、潜在的缺陷和安全漏洞,并生成相应的分析报告。

自动化测试:包括单元测试、集成测试、端到端测试等不同层次的自动化测试。通过使用自动化测试框架(例如JUnit、Selenium)以及集成测试工具,自动执行测试用例并生成测试报告,验证代码的正确性和功能的稳定性。

自动化部署:将构建好的软件包或镜像自动部署到目标环境中。可以使用容器编排工具(如Docker Compose、Kubernetes)或自动部署工具(例如Ansible、Chef)来实现自动化部署的过程。

2.3 实施持续集成的优点

提高软件质量:持续集成通过频繁地将开发人员的代码进行集成和测试,及时发现和解决问题,减少代码缺陷的数量,最终提高软件的质量。

快速反馈:持续集成能够在每次代码提交后快速进行构建、测试和分析,及时提供反馈。如果出现问题,开发人员可以迅速采取行动,避免问题的扩大和滋生,加快开发效率。

减少代码集成风险:持续集成要求团队成员频繁地将代码进行集成,避免长时间独立开发导致的代码集成冲突和问题。通过持续集成,可以降低代码集成风险,减少解决代码冲突的时间和精力。

高效的团队协作:持续集成鼓励开发人员频繁提交代码,并促进团队成员之间的更紧密的协作和沟通。通过每日集成和自动化测试,团队成员可以更好地了解彼此的工作,并共同努力解决问题。

提高交付速度:持续集成将构建、测试和部署过程自动化,加快软件交付的速度。通过自动化流程,减少了手动操作和人为错误,提高了交付的效率和速度。

增强可维护性:持续集成要求代码库保持整洁和健康,注重代码质量和良好的编码实践。这有助于促进可维护性和可扩展性,降低代码维护的难度和成本。

它是一种有效的开发实践,可以提升团队的效率和软件的质量,从而为项目的成功和持续发展奠定基础。

三、持续集成应用实践

3.1工程支持应用层面

图片

3.1.1 工具链-相关应用工具介绍

3.1.1.1 Gitlab:

一个基于Git的代码托管和协作平台。它提供了强大的代码仓库管理功能,支持版本控制、分支管理、合并请求等。同时,GitLab还提供了自动化构建、持续集成、部署管道等功能,可以实现从代码提交到交付的全流程管理。

3.1.1.2 Jenkins:

一个用于构建、测试和交付软件的开源持续集成工具。它支持各种编程语言和构建工具,通过插件化的架构,可以灵活地定制构建流程。Jenkins能够自动化构建、测试和部署过程,提供实时的反馈和集成结果,加速开发团队的交付效率

3.1.1.3 Sonarqube:

一个开源的代码质量管理平台,用于静态代码分析和质量度量。它可以检测代码中的缺陷、漏洞、代码规范违规等问题,帮助开发团队改善代码质量和可维护性。SonarQube生成详细的质量报告,提供全面的代码健康分析和展示

3.1.1.4 Neuxs:

一个用于管理软件包、镜像和资产的仓库管理工具。它支持各种仓库类型,如Maven、Docker等,提供了良好的可搜索、版本控制和发布管理功能。Nexus可以帮助团队管理和分享软件组件,加快软件构建和部署流程

3.1.1.5 Harbor:

一个开源的企业级Docker镜像仓库,用于存储和分发镜像。它提供了安全的镜像托管、访问控制、镜像复制和自动化构建等功能。Harbor能够帮助团队安全地管理和交付Docker镜像,加强镜像的可追踪性和可信度

3.1.1.6 Kubernetes:

一个开源的容器编排平台,用于管理和自动化容器化应用程序的部署、扩展和管理。它提供了容器编排、服务发现、自动伸缩、故障恢复等功能。Kubernetes可以帮助团队高效地管理和运行容器化应用程序,提供弹性和可靠性。

3.2 流程改进应用层面

建立标准:在流程改进中,建立标准是关键的一步,通过建立标准,可以提高团队成员之间的协作效率,减少沟通和理解成本。同时,统一使用适当的开发工具和技术栈,也有助于提高团队的工作效率和代码质量。

搭建流程:引入自动化工具和技术来自动执行任务和流程。使用自动化流程工具来自动处理重复性的工作,或使用脚本和编程来自动执行任务。这样可以节省时间和人力资源,并减少错误的风险。

打通数据:通过集成不同的应用和系统,实现数据的无缝传递和共享,减少手动操作和信息传递的渠道,并且通过数据分析预警,驱动质量改进。

3.3 落地实践过程介绍

图片

3.3.1统一工具

3.3.1.1统一代码仓库,确定项目分支策略

1)将Gitlab作为唯一的代码存放地址,对于历史存在的SVN或多个代码库地址,根据实际情况进行迁移、合并和整合,将代码集中到GitLab中。这样可以简化代码管理,方便团队成员共享和协作。

2)根据项目的实际情况选择合适的分支策略是很重要的,而主干发布分支策略是其中一种常见的选择。这种策略主要是围绕一个主要的稳定分支(通常称为主干或主分支)进行开发和发布,该策略用于简单的项目或小型团队,能够提供简洁的开发流程和快速的迭代速度。在选择分支策略时,根据项目的需求和团队的实际情况综合考虑,选择最适合的方式。  

3.3.1.2建立NEUXS资源库

1)存储库命名规范,定义统一的存储库命名规范,包括命名约定和标准缩写,以便在企业中一致使用。

2)存储库分类和层级,确定存储库的分类和层级结构,以便有效组织和管理不同类型的构建构件和产物

3)访问控制策略,制定访问控制策略,规定上传入口和权限 例如,对于第三方引用包,仅通过管理员检测上传

3.3.1.3统一构建工具

1)使用Jenkins作为持续集成(CI)工具,并与构建工具MAVEN、Gradle集成使用

3.3.2制定自动化流水线

3.3.2.1 预提交检测流水线

在该流水线中,开发人员发送提交代码申请触发 GitLab CI 流水线。通过编写 GitLab CI 配置文件(gitlab-ci.yml),实现提交规范、代码构建和 SonarQube 静态代码检查。如果任意一项检查不达标,本次提交的代码将无法入库。

3.3.2.2 实时触发流程线

在初始阶段,如果项目需求不高或开发人员能力不足以满足要求时,可以采用实时触发流程线。该流程包括提交代码、Jenkins流水线构建、SonarQube静态代码检查和结果反馈,要求当天最后一次提交的代码必须通过构建和检查。

通过实时触发流程线,可以及时发现和解决代码质量的问题,使得开发人员能够及时调整并达到要求。这样可以保证代码的质量和项目的顺利进行。

3.3.2.3 部署测试流水线

该流水线中,当新功能开发的代码提交成功时,会触发 Jenkins 流水线。在流水线中,代码将被编译、进行单元测试,并构建成镜像后入库。接着,部署会重启 Kubernetes 中相应容器环境,并将部署结果发送给代码提交人。

这样,开发人员可以快速将代码部署到测试环境,并进行集成验证。根据公司实际情况,可以根据需求调整工具,例如,在初始阶段如果不具备单元测试能力,可以去掉该节点,并直接使用服务器进行 Docker 部署。

3.3.2.4 发布流水线

发布流水线用于代码合并和自动化发布过程。在测试通过后,触发流水线进行代码合并,并自动生成发布标签。这样可以实现持续集成和自动化的发布,提高发布的效率和准确性。通过这样的流水线,可以在确保代码通过测试后,自动进行代码合并和生成发布标签。这样可以实现持续集成和自动化地发布过程,并提高发布的效率和准确性。

3.3.3 应用集成数据打通

对于在实施初始阶段阶段,可以通过以下方式来获取构建结果、静态检测结果等数据,并进行展示和分析:

1.数据自动收集,通过集成和Jenkins和sonarqube工具,自动收集构建结果、静态检测结果,生成相应的邮件报告和日志

2.数据存放与管理:将收集到的数据存放在数据库表中,通过定义合适的表结构和字段,可以将不同类型的数据进行存储和管理。

3.内部管理系统集成:将数据库中的数据与内部管理系统进行集成,将数据从数据库中提取并导入到内部管理系统中。这样可以实现数据的展示、查询和分析,形成质量大屏展示。

4.数据可视化和报表展示:通过在内部管理系统中使用数据可视化工具可以对数据进行可视化展示和分析。可以创建各种类型的图表、指标和报表,以直观地展示构建结果、静态检测结果等数据,并方便用户进行数据分析和决策。

获取构建结果、静态检测结果等数据,都自动收集并存放在数据库表中,并通知内部管理系统形成质量大屏展示,这样可以帮助团队及时了解项目的质量状况,及时发现和解决问题,提高开发效率和软件质量。同时,通过数据可视化和报表展示,可以提供直观、清晰的数据分析,帮助决策者作出准确的决策。

结论和展望

持续集成是一种先进的软件开发实践,可以通过自动化构建、集成和测试来减少开发周期和风险,提高软件质量和团队协作效率。在实施持续集成时,传统企业可能面临一些独特的应用需求和研发过程痛点,例如复杂的IT基础设施、安全性和合规性要求、保守的公司文化和固化流程等。

持续集成的技术包括自动化版本控制、代码构建、静态代码检查、自动化测试和自动化部署等方面。通过使用相关工具和技术,可以实现持续集成的自动化,提高软件质量、快速反馈、减少代码集成风险、高效的团队协作和提高交付速度。

在应用实践方面,可以从工程支持应用层面和流程改进应用层面进行探讨。在工程支持应用层面,可以使用统一的代码仓库、建立NEUXS资源库、统一构建工具和应用集成数据打通等方法来支持持续集成的实施。在流程改进应用层面,可以制定自动化流水线来实现持续集成的各个阶段,例如预提交检测流水线、实时触发流水线和发布流水线等。

在实践过程中,需要建立标准、搭建流程、打通数据和统一工具等来推动实施持续集成。同时,通过数据的自动收集、存放和展示,可以及时了解项目的质量状况并做出准确的决策。

总之,持续集成是一种有效的开发实践,可以提高团队的效率和软件的质量。在实施持续集成时,需要根据具体情况进行定制化的实践,并逐步优化和调整以适应不断变化的需求和技术发展。

持续集成实施拓展

根据1.1章节中提到的一些独特的应用需求,以下是一些建议实施建议:

1. 对于具有复杂的IT基础设施的闭环部署环境:

a) 标准化部署:制定明确的部署策略,包括清晰的部署流程、规范的环境配置和详细的部署文档。尽量规范化流程,减少文档化的规范说明。

b) 自动化部署:在标准化部署工作完成后,优化可自动化的节点,逐步实现自动化部署。虽然无法实现一键持续部署,但可以快速完成部署并形成标准化工序过程。

2. 在考虑安全性和合规性、保护企业数据和客户信息时:

a) 安全控制措施:采取安全措施,如数据库权限安全设置、权限控制管理、集成工程能力平台和制品库权限保持一致等。代码仓库与项目管理系统集成,并由项目/技术经理进行代码权限管控,实现代码自动建库授权。

b) 第三方包管理:建立私服仓库,限制持续集成编译过程只允许使用私服仓库的包。制定入口规范,并在上传过程中进行质量和安全漏洞检查,不允许上传不达标的第三方包,并将上传记录入库管理。

c) 漏洞扫描和安全评估:使用工具如SonarQube进行静态质量扫描,检查漏洞。

3. 在面对相对保守的公司文化和固化流程时:

a) 渐进式实施:选择简化的持续集成流程开始,例如只引入实时触发构建流程,并选择一个重要的项目作为标杆。逐渐增加持续集成的范围和复杂度,增加信心和经验,然后再全面推广。

b) 培训和支持:提供培训和宣讲材料,增加团队成员对持续集成的理解。分享成功案例,并提供培训来帮助团队成员掌握工具和技术的使用。

c) 灵活使用持续集成原则:根据团队项目现状,制定适合的流水线。例如,在企业项目编译通过率低于50%的情况下,可以先不要求项目必须进行单元测试。  

参考文献:

1.《DevOps IT 效能新基建》--顾黄亮编著

2.《企业级DevOps技术与工具实践》--刘淼 张笑梅编著

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/119716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于YOLOv8模型的烟雾目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要:基于YOLOv8模型的烟雾目标检测系统可用于日常生活中检测与定位烟雾目标,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数据集…

Ubuntu22.04安装,SSH无法连接

Ubuntu初始化安装后,系统默认不允许root通过ssh连接,因此需要完成三个设置 1.修改ssh配置文件 vim /etc/ssh/sshd_config 将PermitRootLogin注释打开,并将值改为yes 保存修改并退出 :wq 2.重启ssh服务 sudo service ssh restart 3.重新打…

八大排序算法(C语言版)之插入排序

八大排序详解 目录:一、排序的概念1.1 排序的概念1.2 排序的应用 二、直接插入排序三、希尔排序四、排序算法复杂度及稳定性分析 目录: 八大排序算法: #mermaid-svg-7qCaGEYz0Jyj9dYw {font-family:"trebuchet ms",verdana,arial,…

[极客大挑战 2019]Havefun

1.打开链接 2.检查一下源代码 发现一段代码。 3.分析代码 <!-- $cat$_GET[cat]; echo $cat; if($catdog){ echo Syc{cat_cat_cat_cat}; } --> 询问ChatGPT&#xff1a; 从您提供的代码片段来看&#xff0c;这是…

Elasticsearch聚合----aggregations的简单使用

文章目录 Getting started1、搜索 address 中包含 mill 的所有人的年龄分布以及平均年龄&#xff0c;但不显示这些人的详情2、size0不展示命中记录&#xff0c;只展示聚合结果3、按照年龄聚合&#xff0c;并且请求这些年龄段的这些人的平均薪资4、查出所有年龄分布&#xff0c;…

【Android Studio】工程中文件Annotate with Git Blame 不能点击

问题描述 工程文件中想要查看代码提交信息但是相关按钮不可点击 解决方法 Android Studio -> Preferences -> Version Control-> 在Unregistered roots里找到你想要的工程文件 点击左上角➕号 然后右下角Apply即可

Filter过滤器和Listener监听器

2023.10.26 Filter过滤器 过滤器&#xff0c;顾名思义就是对事物进行过滤的。Web中的过滤器&#xff0c;就是对请求进行过滤&#xff0c;我们使用过滤器&#xff0c;就可以对请求进行拦截&#xff0c;然后做相应的处理&#xff0c;实现许多特殊功能。如登录控制&#xff0c;权…

uniapp开发小程序—picker结合后台数据实现二级联动的选择

一、效果图 二、完整代码 <template><view><picker mode"multiSelector" change"bindMultiPickerChange" columnchange"bindMultiPickerColumnChange":value"multiIndex" :range"multiArray"><view c…

基于FPGA的电风扇控制器verilog,视频/代码

名称&#xff1a;基于FPGA的电风扇控制器verilog 软件&#xff1a;QuartusII 语言&#xff1a;Verilog 代码功能&#xff1a; 基于FPGA的电风扇控制器 运用 EDA SOPO实验开发系统设计一个基于FPGA的电风扇定时开关控制器,能实现手动和自动模式之间的切换。要求: (1)KI为电…

【Gensim概念】03/3 NLP玩转 word2vec

第三部分 对象函数 八 word2vec对象函数 该对象本质上包含单词和嵌入之间的映射。训练后&#xff0c;可以直接使用它以各种方式查询这些嵌入。有关示例&#xff0c;请参阅模块级别文档字符串。 类型 KeyedVectors 1&#xff09; add_lifecycle_event(event_name, log_level2…

@AutoConfigurationPackage注解类

包名package org.springframework.boot.autoconfigure 方法 String[] basePackages() 向AutoConfigurationPackages中注册的基本包&#xff0c;使用basePackageClasses作为基于字符串的包的类型安全替代方案 Class<?>[] basePackageClasses() 键入basePackage…

APP破解去广告

1.修改图标和名称 名称直接改 找到图标在进去把他替换掉 2.修改app包名实现分身 修改包名实现app分身_Tian翊的博客-CSDN博客 3.修改资源去广告 安卓逆向006之修改APK资源去广告_修改安装包去除app内广告-CSDN博客 打开模拟器后在cmd命令行输入adb devices连接上 在模拟器中…

每日一练——返回链表的中间结点

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

Dockerfile文件自动化生成R4L镜像

Dockerfile文件自动化生成R4L镜像的步骤 1、安装Docker&#xff1a;2、使用Dockerfile一键生成镜像&#xff1a;3、查看生成的Docker镜像&#xff1a;4、删除Docker镜像&#xff1a;5、生成Docker容器&#xff1a;6、查看容器7、删除容器 1、安装Docker&#xff1a; curl -fsS…

sqoop和flume简单安装配置使用

1. Sqoop 1.1 Sqoop介绍 Sqoop 是一个在结构化数据和 Hadoop 之间进行批量数据迁移的工具 结构化数据可以是MySQL、Oracle等关系型数据库 把关系型数据库的数据导入到 Hadoop 与其相关的系统 把数据从 Hadoop 系统里抽取并导出到关系型数据库里 底层用 MapReduce 实现数据 …

如何巧妙告知家长成绩分数

如何让学生和家长们查询期中考试成绩,一直是让许多老师都头疼不已的问题。今天我就来交给大家怎么解决这个问题。 我们先了解一下成绩查询系统是什么。在互联网高度发达的今天&#xff0c;成绩查询系统已经不再是学校的专属&#xff0c;而是可以通过网络平台进行操作的一种工具…

LVS负载均衡(LVS简介、三种工作模式、十种调度算法)

LVS简介 LVS&#xff08;Linux Virtual Server&#xff09;是一种基于Linux内核的高可用性负载均衡软件。它通过将客户端请求分发到多个后端真实服务器&#xff0c;提高系统性能和可靠性。LVS支持多种调度算法&#xff0c;如轮询、最少连接、源地址哈希等&#xff0c;用于决定…

利用MATLAB创建栅格地图(代码可复制)

先做一个声明&#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来&#xff0c;因此对智能优化算法感兴趣的朋友&#xff0c;可关注我的个人公众号&#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法&#xff0c;经典的&#xff0c;或者是近几年…

解决msvcp120.dll丢失的问题的5个方法,修复系统dll问题

在使用计算机的过程中&#xff0c;我们经常会遇到各种各样的动态链接库&#xff08;DLL&#xff09;文件。其中之一就是“msvcp120.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题&#xff0c;我们需要找到合适的方法来修复丢失的msvcp120.dll文件。…

SpringSecurity分布式安全框架

Spring Security是一个基于Spring框架的安全框架&#xff0c;它提供了全面的安全解决方案&#xff0c;包括用户认证和用户授权等Web应用安全性问题。Spring Security可以轻松扩展以满足自定义需求&#xff0c;它的真正强大之处在于它可以轻松扩展以满足自定义要求。 对于分布式…