当前位置: 首页 > news >正文

Devops 实践

Devops 实践

      • 基本概念
      • jenkins实践
        • 安装jenkins
        • 仓库环境准备
        • 代码环境准备
        • 第一次构建
        • 持续集成持续部署
        • 集成插件
      • 优秀实践
      • 心得体会
    • 参考

摘要:本文首先将介绍一些基本概念,包括Devops,CI/CD等,然后基于知名开源CI/CD工具jenkins进行实战。最后本文将简单介绍一些业界关于这方面的优秀实践,同时给出自己的一些见解和思路。
关键词: Devops,CI/CD,jenkins,质量门禁

基本概念

  1. devops
    devops这个词前半部分的dev是development的缩写,意指开发,ops是operations的缩写,意指运维,所以devops一般指一种软件开发思想,开发团队和运维团队要高效地协作、沟通和配合,或者干脆就变成一个团队,既是开发,又是运维。
  2. CI/CD
    CI/CD是英文单词continuous integration/continuous deployment的缩写,也就是指持续集成持续部署,也就是说要加快交付的速度,能够支持频繁的交付,在这种情况下,部署往往需要自动化部署。
  3. 质量门禁
    基于以上的一些概念,业界的一些研发平台会将开发测试发布抽象成一条流水线,一次代码上的变更经过这些阶段完成交付。在流水线上可以有很多的节点,比如在发布中,可以有编译节点、容器打包节点等等,可以在一些阶段插入一些卡点节点,通过预先定义的规则,如果某次代码变更在一些测试覆盖率、单元测试覆盖率上、流量回放diff率等指标,如果达不到预先定义的阈值,可以对这些变更进行拦截,从而起到阻止有一定风险的变更上线,这就是质量门禁。

jenkins实践

jenkins是知名的开源CI/CD的工具,本文介绍如何使用jenkins来自动持续部署和质量把关。

安装jenkins

笔者所使用的实验平台为ubuntu 20.04。

  1. 安装好java环境,命令如下:
sudo apt update && sudo apt install openjdk-17-jdk

通过java --version验证是否安装成功,安装成功输出如下:
在这里插入图片描述
2. jenkins官网下载war包
笔者下载的是最新的LTS版本,下载地址
运行是下载该war且运行该war包的命令,如下:

wget https://get.jenkins.io/war-stable/2.479.2/jenkins.war && java -jar jenkins.war --httpPort=8080

运行成功后输出中提示:
在这里插入图片描述
也就是说通过访问http://127.0.0.1:8080来访问jenkins,然后管理员的密码可以在某个文件中找到,访问这个网址,如下图:
在这里插入图片描述
输入密码进入如下界面:
在这里插入图片描述
选择安装建议的插件,因为jenkins只是一个平台,或者说是一个空的流水线,真正发挥作用的是流水线上的节点,也就是这里所说的插件。安装大概需要十分钟左右的时间,然后设置账户界面,要求设置一个管理员账户,这里可以选择跳过继续使用刚才的admin账户。
同理后面的一些设置也可以跳过,最终完成所有配置。如下:
在这里插入图片描述

仓库环境准备

我们希望达成的一个目标就是向代码仓库的分支提交代码时,能够自动发起编译测试构建部署等流程,这样就达到了持续集成持续部署的目的。在jinkens平台上,可以连接git仓库,包括github,gitee和直接搭建的gitlab等等。由于jinkens部署在内网,而这些多在外网上,因此需要在本地搭建一个简单的git代码仓库。我们选择Gogs这种轻量级的代码仓库作为工具,以下为如何安装Gogs的过程:
首先下载安装包和解压,命令为 wget https://dl.gogs.io/0.13.0/gogs_0.13.0_linux_amd64.tar.gz && tar -zxvf gogs_0.13.0_linux_amd64.tar.gz
然后输入命令cd gogs && nohup ./gogs web > /dev/null 2>&1 &后台启动,访问http://127.0.0.1:3000/进入安装配置界面,如下:
在这里插入图片描述
数据库选择sqlite3,然后进入如下界面:
在这里插入图片描述
完成注册后用该账户登录,来到如下界面,直接创建一个仓库
在这里插入图片描述

代码环境准备

为了和后面实践的一些插件保持一致,这里生成一个demo形式的maven管理的sprint-boot项目,资源连接。这是一个简单的spring boot项目,定义一个ping接口,返回pong,后续通过不断新增提交代码来触发jinkens的自动构建。
现在将这个项目的代码推送到gogs中,在git push origin master中,回提示输入用户名及密码,就是刚才注册的。
在这里插入图片描述
提交成功示意图如下:
在这里插入图片描述

第一次构建

回到jinkens的控制台,进行源代码相关的配置,如下图,配置为gogs仓库的地址和访问凭证。
在这里插入图片描述
然后点击build now进行第一次构建,如下图:
在这里插入图片描述
点击查看第一次构建的详情,如下:
在这里插入图片描述
可以看到,只是拉取了代码,要真正构建,需要直接写脚本来构建运行,如下图在配置中,增加构建步骤,选择执行脚本,然后脚本里只有一行命令,通过maven启动这个sprint-boot项目。保存后再次构建。
在这里插入图片描述
第一次构建成功,也确实可以正常访问相关接口。
在这里插入图片描述

持续集成持续部署

要想达到持续集成持续部署的目的,一般要配置触发器,能够让jinkens自动地开始部署。一般有三种方式,一个是关联其他项目,如果其他项目完成构建那么本项目开始构建;一个是定时构建;还有一个可能也是最常用的一个就是代码仓库有更新就构建。我们以最后一个进行相关的演示。
首先需要安装如下插件,在这里插入图片描述
回到项目的配置页面,配置构建触发器,如下图,可以看到,是需要代码仓库在代码更新时主动调用相关接口进行触发。
在这里插入图片描述
然后配置gogs,首先找到gogs的安装目录,进入custom/conf文件夹,修改app.ini文件,如下图,增加一个LOCAL_NETWORK_ALLOWLIST配置,其中,ip地址是jinkens所在的地址。
在这里插入图片描述
先重新启动,然后进入一下完整验证配置是否生效
在这里插入图片描述
然后在测试仓库中添加钩子,注意如果添加失败,请确保payload url的ip地址在上面配置的local network allowlist中。
在这里插入图片描述
然后更新代码,增加一个接口,提交到代码仓库,发现jinkens自动发起了一次构建,如下图所示:
在这里插入图片描述
至此达到了持续集成持续部署的目的。

集成插件

jinkens只是一个平台,真正有用的还是其内部丰富的插件。在以上的实践中,jinkens这条流水线只有一些编译、构建和部署节点,但其实还可以增加更多的节点,比如一些测试节点、门禁卡点节点、代码漏洞检查节点、发布周知节点等等。下面我们通过安装使用更多的插件来丰富我们这条自动发布构建流水线的功能。
首先是安装Allure自动化测试报告插件,如下图。
在这里插入图片描述
然后对allure插件进行相关配置,
在这里插入图片描述
最后对构建项目进行配置,在构建完项目后选择allure report。
在这里插入图片描述

优秀实践

心得体会

参考

  • 美团到店终端从标准化到数字化的演进之路
  • 持续集成09–Jenkins配置Sonar代码漏洞扫描工具
  • Jenkins官网
  • CI/CD 实践总结

相关文章:

Devops 实践

Devops 实践 基本概念jenkins实践安装jenkins仓库环境准备代码环境准备第一次构建持续集成持续部署集成插件 优秀实践心得体会 参考 摘要:本文首先将介绍一些基本概念,包括Devops,CI/CD等,然后基于知名开源CI/CD工具jenkins进行实…...

MySQL 索引(B+树)详解

MySQL 索引(B树)详解 MySQL逻辑架构对比InnoDB与MyISAM存储结构存储空间可移植性、备份及恢复事务支持AUTO_INCREMENT表锁差异全文索引表主键表的具体行数CRUD操作外键 sql优化简介什么情况下进行sql优化sql语句执行过程sql优化就是优化索引 索引索引的优…...

医疗系统国产数据库高质量发展路径探析

信息工程人员操作数据库 一、国外数据库在医疗系统中的困境 (一)数据分散与难以整合 在美国,分散式医疗服务成为癌症研究数据库优化的巨大障碍。患者先在社区接受肿瘤科医生常规检查,再到学术医疗中心进行尖端治疗,然…...

微信小程序报错:http://159.75.169.224:7300不在以下 request 合法域名列表中,请参考文档

要解决此问题,需打开微信小程序开发者工具进行设置,打开详情-本地设置重新运行,该报错就没有啦...

智能租赁管理系统助力规范化住房租赁市场提升用户体验

内容概要 在当今的住房租赁市场中,智能租赁管理系统应运而生,为房东和租客带来了前所未有的便利。这套系统就像一位全能助手,将租赁信息、监管机制以及在线签约功能集成在一起,让整个过程变得流畅而高效。换句话说,您…...

MicroBlaze软核开发(一):Hello World

实现功能:使用 MicroBlaze软核 串口打印 Hello World Vivado版本:2018.3 目录 MicroBlaze介绍 vivado部分: 一、新建工程 二、配置MicroBlaze 三、添加Uart串口IP 四、生成HDL文件编译 SDK部分: 一、导出硬件启动SDK 二、…...

跟着问题学15——GRU网络结构详解及代码实战

1 RNN的缺陷——长期依赖的问题 (The Problem of Long-Term Dependencies) 前面一节我们学习了RNN神经网络,它可以用来处理序列型的数据,比如一段文字,视频等等。RNN网络的基本单元如下图所示,可以将前面的…...

【uniapp】swiper切换时,v-for重新渲染页面导致文字在视觉上的拉扯问题

问题描述 先用v-for渲染了几个列表,但这几个列表是占同一个位置的,只是通过切换swiper来显示哪个列表显示,也就是为了优化页面切换时候,没有根据swiper的current再更新v-for的数据,但现在就有个问题,怎么隐…...

【Android】Compose初识

文章目录 1.Compose是什么2.Compose优势3.可组合函数4.布局5.配置布局6.Material Design7.列表与动画8.声明式UI9.组合10.重组 1.Compose是什么 Jetpack Compose是谷歌开发的一个现代的、声明式的UI工具包,用于构建原生的Android应用程序界面。它简化了创建复杂用户…...

前端工程化面试题(二)

前端模块化标准 CJS、ESM 和 UMD 的区别 CJS(CommonJS)、ESM(ESModule)和UMD(Universal Module Definition)是前端模块化标准的三种主要形式,它们各自有不同的特点和使用场景: CJS&…...

以攻击者的视角进行软件安全防护

1. 前言 孙子曰:知彼知己者,百战不殆;不知彼而知己,一胜一负,不知彼,不知己,每战必殆。 摘自《 孙子兵法谋攻篇 》在2500 年前的那个波澜壮阔的春秋战国时代,孙子兵法的这段话&…...

008.精读《Apache Paimon Docs - Table w/o PK》

文章目录 1. 引言2. 基本概念2.1 定义2.2 使用场景 3. 流式处理3.1 自动小文件合并3.2 流式查询 4. 数据更新4.1 查询4.2 更新4.3 分桶附加表 5 总结 1. 引言 通过本文,上篇我们了解了Apache Paimon 主键表,本期我们将继续学习附加表(Append…...

C#实时监控指定文件夹中的动态,并将文件夹中生成的新图片显示在界面上(相机采图,并且从本地拿图)

结果展示 此类原理适用于文件夹中自动生成图片,并提取最新生成的图片将其显示, 如果你是相机采图将其保存到本地,可以用这中方法可视化,并将检测的结果和图片匹配 理论上任何文件都是可以监视并显示的,我这里只是做了…...

使用SQLark分析达梦慢SQL执行计划的一次实践

最近刚参加完达梦的 DCP 培训与考试,正好业务系统有个 sql 查询较慢,就想着练练手。 在深入了解达梦的过程中,发现达梦新出了一款叫 SQLark 百灵连接的工具。 我首先去官网大致浏览了下。虽然 SQLark 在功能深度上不如 DM Manager 和 PL/SQ…...

【人工智能】用Python构建高效的自动化数据标注工具:从理论到实现

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 数据标注是构建高质量机器学习模型的关键环节,但其耗时耗力常成为制约因素。本篇文章将介绍如何用Python构建一个自动化数据标注工具,结合机器学习和NLP技术,帮助加速数据标注过程。我们将从需求分析入…...

Java --- 注解(Annotation)

一.什么是注解? 在Java中,注解(Annotation)是一种元数据(metadata),它为程序中的类、方法、字段等提供额外的描述信息。注解本身不直接改变程序的行为,但可以被编译器、开发工具、框…...

nodejs作为provider接入nacos

需求:公司产品一直是nodejs的后台,采用的eggjs框架,也不是最新版本,现有有需求需求将这些应用集成到微服务的注册中心,领导要求用java。 思路:用spring cloud gateway将需要暴露的接口url转发,…...

SpringBoot3+Micormeter监控应用指标

监控内容简介 SpringBoot3项目监控服务 ,可以使用Micormeter度量指标库,帮助我们监控应用程序的度量指标,并将其发送到Prometheus中并用Grafana展示。监控指标有系统负载、内存使用情况、应用程序的响应时间、吞吐量、错误率等。 micromete…...

Mybatis-plus 简单使用,mybatis-plus 分页模糊查询报500 的错

一、mybtis-plus配置下载 MyBatis-Plus 是一个 Mybatis 增强版工具&#xff0c;在 MyBatis 上扩充了其他功能没有改变其基本功能&#xff0c;为了简化开发提交效率而存在。 具体的介绍请参见官方文档。 官网文档地址&#xff1a;mybatis-plus 添加mybatis-plus依赖 <depe…...

2022 年 12 月青少年软编等考 C 语言三级真题解析

目录 T1. 鸡兔同笼思路分析T2. 猴子吃桃思路分析T3. 括号匹配问题T4. 上台阶思路分析T5. 田忌赛马T1. 鸡兔同笼 一个笼子里面关了鸡和兔子(鸡有 2 2 2 只脚,兔子有 4 4 4 只脚,没有例外)。已经知道了笼子里面脚的总数 a a a,问笼子里面至少有多少只动物,至多有多少只…...

别再为发票报销发愁!用Python+EasyOFD库,5分钟搞定OFD转PDF/图片(附完整代码)

5分钟极速解决发票报销难题&#xff1a;PythonEasyOFD高效转换实战指南 每次月底报销时&#xff0c;面对邮箱里堆积如山的OFD格式电子发票&#xff0c;你是否也感到头疼&#xff1f;手动一张张下载、转换、打印不仅耗时耗力&#xff0c;还容易出错。今天我们就来彻底解决这个困…...

AD20 原理图与PCB的协同设计:从单向更新到双向同步的进阶指南

1. AD20协同设计的基础概念 刚接触AD20时&#xff0c;最让我头疼的就是原理图和PCB之间的同步问题。记得第一次做多板卡项目&#xff0c;光是处理不同原理图之间的元件冲突就折腾了一整天。AD20的协同设计功能远比我们想象的强大&#xff0c;但要用好它&#xff0c;得先理解几个…...

IEEE会议论文避雷指南:如何用GSview+Photoshop搞定EPS图片压缩与特殊字符命名

IEEE会议论文图片处理全攻略&#xff1a;从格式转换到命名规范 第一次投稿IEEE会议的新手研究者们&#xff0c;往往会在图片处理环节栽跟头——明明内容扎实、实验充分&#xff0c;却因为技术细节问题被编辑退回修改。这不是学术能力的问题&#xff0c;而是对印刷出版标准的不熟…...

NetCoreServer高级特性揭秘:自定义协议、会话管理和扩展机制

NetCoreServer高级特性揭秘&#xff1a;自定义协议、会话管理和扩展机制 【免费下载链接】NetCoreServer Ultra fast and low latency asynchronous socket server & client C# .NET Core library with support TCP, SSL, UDP, HTTP, HTTPS, WebSocket protocols and 10K c…...

别再手动画点阵了!用PCtoLCD2002搞定LCD/OLED汉字显示,附STM32移植代码

嵌入式开发实战&#xff1a;PCtoLCD2002字模生成与STM32显示全链路解析 在嵌入式设备上实现中文显示一直是开发者面临的经典难题。传统的手动绘制点阵方式不仅效率低下&#xff0c;而且难以保证显示效果的一致性。本文将深入探讨如何利用PCtoLCD2002工具链&#xff0c;从字模生…...

PCA9685嵌入式C++驱动库:高效I²C PWM控制方案

1. PCA9685 LED驱动库技术解析&#xff1a;面向嵌入式C的高效IC PWM控制方案1.1 芯片级原理与工程定位PCA9685是NXP&#xff08;原Philips&#xff09;推出的16通道12位PWM LED驱动器&#xff0c;采用标准IC&#xff08;TWI&#xff09;接口通信&#xff0c;支持最高1.6 MHz时钟…...

慕尼黑工业大学全新突破:让2D图片生成器变身3D世界建造师

这项由慕尼黑工业大学领导的研究发表于2026年的计算机视觉与模式识别顶级会议&#xff0c;论文编号为arXiv:2603.19708v1。有兴趣深入了解的读者可以通过该编号查询完整论文。当你使用手机拍摄一张美丽风景照片时&#xff0c;你可能从未想过&#xff0c;这张平面照片其实包含了…...

从YOLO到A*:手把手教你用PyTorch和OpenCV搭建一个简易的自动驾驶避障仿真器

从YOLO到A*&#xff1a;用PyTorch和OpenCV构建自动驾驶避障仿真器 想象一下&#xff0c;你正坐在一辆自动驾驶汽车里&#xff0c;车辆能够自动识别前方的行人、车辆和障碍物&#xff0c;并规划出安全的行驶路径。这种看似科幻的场景&#xff0c;如今正逐渐成为现实。本文将带你…...

教育心理学教程资源合集

08. 考研心理学课程 文件大小: 34.9GB内容特色: 34.9GB全科视频讲义真题&#xff0c;一站备齐适用人群: 心理学考研党、跨专业考生、二战冲刺核心价值: 名师系统梳理考点&#xff0c;节省50%整理时间下载链接: https://pan.quark.cn/s/074261ae5d32 06. 教育心理学&#xff0…...

我国网络安全行业前景如何?是否可以入行?有哪些岗位?

我国网络安全行业前景如何&#xff1f;是否可以入行&#xff1f;有哪些岗位&#xff1f; 网络空间安全专业简称“网络安全专业”&#xff0c;主要以信息构建的各种空间领域为主要研究对象&#xff0c;包括网络空间的组成、形态、安全、管理等。我国网络空间安全专业于2015年设立…...