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

news2024/12/23 19:03:40

作者:赖嘉明 研发效能(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.coloradmin.cn/o/1135918.html

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

相关文章

基于FPGA的图像PSNR质量评估计算实现,包含testbench和MATLAB辅助验证程序

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 设置较大的干扰,PSNR15。 设置较小的干扰,PSNR25。 2.算法运行软件版本 matlab2022a vivado2019.2 3.部分核心程序 ti…

Keil 4 软件安装包下载及安装教程(图文详解)

目录 一.简介 二.安装教程 Keil4(32/64)位下载地址: 链接: https://pan.baidu.com/s/1F72jjsTjeOCLCVeL1c1qXg 密码:24nu 一.简介 Keil C51是一款由Keil Software(现在是ARM公司的一部分&#xff09…

麒麟KYLINOS上使用开始菜单图标开启或关闭vnc

原文链接:麒麟KYLINOS上使用开始菜单图标开启或关闭vnc hello,大家好啊,今天给大家带来第二篇在麒麟KYLINOS上安装部署vnc的文章,本篇文章讲述了如何将vnc的开启及关闭做成图标展示在开始菜单,并且设置当第一次启动vnc…

【LeetCode:2520. 统计能整除数字的位数 | 模拟 | HashMap】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

【问题解决】发现Web应用程序源代码泄露模式

1. 漏洞描述 AppScan扫描软件的安全报告中,有一类漏洞被描述为:“发现Web应用程序源代码泄露模式”。 该类问题指的是在服务器端,Web应用程序的开发者工具(Devtools)中的Sources面板中可以看到前端build构建之后的相关源代码,包…

Win10+Ubuntu20.04双系统双硬盘(SSD+HDD)安装与启动

Win10Ubuntu20.04双系统双硬盘安装与启动 前言准备工作Step 1: 备份你的数据Step 2: 制作安装Ubuntu的磁盘分区若以方式2进行安装:若以方式3进行安装: Step 3: 下载ubuntuStep 4: 制作ubuntu启动U盘Step 5: 从U盘启动ubuntuStep 6: 安装ubuntuStep 7: 系…

9.(vue3.x+vite)组件间通信方式之EventBus

前端技术社区总目录(订阅之前请先查看该博客) 示例效果 EventBus的简介 EventBus 又称为事件总线。是所有组件共用相同的事件中心,可以向该中心注册发送事件或接收事件,所以组件都通知到其他组件,但也就是太方便所以若使用不慎,就会造成难以维护的“灾难”。 其具体的思…

纯干货!一个白帽子挖漏洞经验细致分享

不知道是不是很多人和我一样,每天刷着漏洞,看着自己的排名一位一位的往上提升,但是,但是。总感觉怪怪的,为什么别人刷的漏洞都是现金,而自己刷的漏洞都是给库币。别人一天为什么提交那么多漏洞,…

ES6新增循环对象的四种方法(通俗易懂)

在我们ES6之前,我们一般都是用for…in来循环对象,现在我们ES6为我们新增了几种方法,让我为大家介绍一下吧! 1.Object.keys() 静态方法返回一个由给定对象自身的可枚举的字符串键属性名组成的数组 const obj {name:"zs&quo…

如何在Pacman (Arch Linux)中用Configuration设置HTTP?

首先,确定HTTP爬虫服务器的IP地址和端口。在这个例子中,我们将使用一个免费的HTTP爬虫服务器:getproxy。 接下来,按照以下步骤在 Pacman (Arch Linux) 中设置HTTP爬虫: 1、打开终端。 2、使用以下命令进入 Pacman …

FLStudio2024汉化破解版在哪可以下载?

水果音乐制作软件FLStudio是一款功能强大的音乐创作软件,全名:Fruity Loops Studio。水果音乐制作软件FLStudio内含教程、软件、素材,是一个完整的软件音乐制作环境或数字音频工作站... FL Studio21简称FL 21,全称 Fruity Loops Studio 21,因此国人习惯叫…

极米科技全面发力4K产品,极米H6 Pro 4K、H6 4K高亮定焦版任你选

今年以来,在促进消费升级、新兴渠道红利放缓等多方因素作用之下,智能投影行业成为家电品类中的亮点。极米科技、海信视像、联合光电、京东方等多家上市公司及京东等产业链巨头均在智能投影布局上提速。 其中,极米科技今年在产品布局上更是动…

【数智化人物展】同方有云联合创始人兼总经理江琦:云计算,引领数智化升级的动能...

江琦 本文由同方有云联合创始人兼总经理江琦投递并参与《2023中国企业数智化转型升级先锋人物》榜单/奖项评选。 数据智能产业创新服务媒体 ——聚焦数智 改变商业 在这个飞速发展的数字时代,我们置身于一个前所未有的机遇与挑战并存的时刻。数字化转型不再仅仅是一…

每日一题 2520. 统计能整除数字的位数(简单)

简单题频率好高,预测一波明天困难 class Solution:def countDigits(self, num: int) -> int:ans 0for i in str(num):if num % int(i) 0:ans 1return ans

什么是电流电压频谱?

什么是电流电压频谱? 首先,让我们来了解什么是电流电压的频谱。在交流电(AC)系统中,电流和电压是随时间变化而变化的。它们可以表示为时间的函数,即i(t)和u(t)。将这两个时间函数进行傅里叶变换&#xff0c…

IDEA常用的一些插件

1、CodeGlance 代码迷你缩放图插件,可以快速拖动代码,和VScode一样 2、Codota 代码提示工具,扫描你的代码后,根据你的敲击完美提示。 Codota基于数百万个开源Java程序和您的上下文来完成代码行,从而帮助您以更少的…

Vue 商场首页头部布局

封装基础网络请求,前后端联调请求后端接口 npm install axios -Ssrc/network/requestConfig.js import axios from axios; import store from "/store"; export function request(config){const instance axios.create({baseURL:"http://127.0.0.…

用GoAccess可视化监控npm日志

什么是 GoAccess? GoAccess 是一个开源实时 Web 日志分析器和交互式查看器,可在 *nix 系统的终端中或通过浏览器运行。它为需要动态可视化服务器报告的系统管理员提供快速且有价值的 HTTP 统计信息。 什么是 GoAccess for Nginx Proxy Manager Logs? Go…

【C++入门到精通】 哈希结构 | 哈希冲突 | 哈希函数 | 闭散列 | 开散列 [ C++入门 ]

阅读导航 引言一、哈希概念二、哈希冲突三、哈希函数⭕哈希函数应具备的特点⭕哈希函数设计原则⭕常见的哈希函数(1)直接定址法(重要)(2)除留余数法(重要)(3)…

详解预处理(1)

目录 预定义符号 预处理指令#define #define定义符号 #define定义宏 #define替换规则 #和##(C语言预处理操作符) # ## 带副作用的宏参数 宏和函数的对比 命名约定 在之前我们学习了一个文本文件.c生成一个可执行程序。今天我们详细讲解其中的…