Git+Jenkins 基本使用

一、什么是 Jenkins

        Jenkins 是一个功能强大的应用程序,允许持续集成和持续交付项目(持续部署),无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。集成 Jenkins 可以用于一些测试和部署技术。
Jenkins 原名 Hudson,2011 年改为现在的名字,它是一个开源的实现持续集成的软件工具。官方网站网址:https://jenkins.io/ 。Jenkins 能实时监控持续集成过程中所存在的问题,提供详细的日志文件和提醒功能,还能通过图表的形式,形象地展示项目构建的趋势和稳定性。
Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。
jenkins 提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实时监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。
Jenkins 可以构建一个自动化的持续集成环境可以使用它来 “自动化” 编译、打包、分发部署应用,它兼容 ant、maven、gradle 等多种第三方构建工具,同时与 svn、git 能无缝集成,也支持直接与知名源代码托管网站,如 github、bitbucket 直接集成。

1:为什么要用 Jenkins

        目前持续集成 (CI) 已成为当前许多软件开发团队在整个软件开发生命周期内侧重于保证代码质量的常见做法。它是一种实践,旨在缓和和稳固软件的构建过程。并且能够帮助您的开发团队应对如下挑战:

(1) 软件构建自动化

        配置完成后,CI 系统会依照预先制定的时间表,或者针对某一特定事件,对目标软件进行构建。

(2) 构建可持续的自动化检查

        CI 系统能持续地获取新增或修改后签入的源代码,也就是说,当软件开发团队需要周期性的检查新增或修改后的代码时,CI 系统会不断确认这些新代码是否破坏了原有软件的成功构建。这减少了开发者们在检查彼此相互依存的代码中变化情况需要花费的时间和精力 (说直接一点也是钱啊,呵呵)。

(3) 构建可持续的自动化测试

        构建检查的扩展部分,构建后执行预先制定的一套测试规则,完成后触发通知 (Email,RSS 等等) 给相关的当事人。

(4) 生成后后续过程的自动化

        当自动化检查和测试成功完成,软件构建的周期中可能也需要一些额外的任务,诸如生成文档、打包软件、部署构件到一个运行环境或者软件仓库。这样,构件才能更迅速地提供给用户使用。

2、Jenkins 的特点

特点描述
易安装从官网仅需下载一个 jenkins.war 文件后,直接运行,无需额外安装,更无需安装数据库
易配置提供友好的 GUI 配置界面
变更支持能从代码仓库(SVN/Git)中获取并产生代码更新列表,并显示到编译输出信息中
支持永久链接用户通过 Web 访问 Jenkins,Web 页面链接地址是永久链接地址,可在各种文档中直接使用该链接
集成 E-Mail/RSS/IM完成一次集成后,可通过这些工具实时收取集成结果(构建集成需花费一定时间,有此功能可在等待结果时干别的事 )
JUnit/TestNG 测试报告以图表等形式提供详细的测试报表功能
支持分布式构建可以把集成构建等工作分发到多台计算机中完成
文件指纹信息会保存构建集成所产生的 jars 文件、集成构建使用了哪个版本的 jars 文件等构建记录
支持第三方插件支持第三方插件,使 Jenkins 功能变得越来越强大

二、什么是 CI/CD

        持续集成 (Continuous integration) 是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

        持续部署(continuous deployment)是通过自动化的构建、测试和部署循环来快速交付高质量的产品。某种程度上代表了一个开发团队工程化的程度,毕竟快速运转的互联网公司人力成本会高于机器,投资机器优化开发流程化相对也提高了人的效率,让 engineering productivity 最大化。

        持续交付(Continuous delivery),是一种软件工程手法,让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以释出的状况。它的目标在于让软件的建置、测试与释出变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险。

CICD 是 持续集成(Continuous Integration,简称 CI ) 和 持续交付 / 持续部署(Continuous Delivery/Continuous Deployment,简称 CD ) 的合称,是一套自动化流程体系,帮你高效、稳定地把代码变成可用的软件,下面结合你给的流程图,拆解讲讲 :


1、持续集成(CI)—— 解决 “代码整合冲突、尽早发现问题”

流程逻辑:

        程序员在本地开发(比如用 IDEA 写代码),写完提交到「版本控制服务器」(像 Git/SVN 这类,存着完整代码库 )。每次提交后,版本控制里的钩子程序会触发操作,给 Jenkins 发通知。Jenkins 收到通知,用 git/svn 插件 拉取最新代码,再通过 maven 插件 自动编译、打包(生成 war/jar 这些包)。这一步核心是 “频繁合并小改动,自动验证” ,比如多人开发同一个项目,每天多次提交代码,Jenkins 自动帮你整合、检查编译和单元测试是否能过,避免最后合并代码一堆冲突、问题藏到上线才爆。

价值:

早发现 bug:代码一提交就自动跑检查,有问题立刻知道,不用等到上线才返工。
减少合并痛苦:小步提交、频繁整合,比 “憋大招式开发”(很久才合并代码)冲突少太多。

2、持续交付 / 持续部署(CD)—— 解决 “手动部署繁琐、发布效率低”

持续交付(Continuous Delivery):

        Jenkins 打包好 war/jar 包后,会通过 Publish over SSH(远程执行命令)或 Deploy to container(比如把 war 包丢到 Tomcat 里)这些方式,把包推到测试 / 预发布环境。这一步是 “让可部署的产物随时能交付” ,测试团队可以快速拿到最新包验证,流程到这一步可能还需要人工点一下 “确认发布到生产”。

持续部署(Continuous Deployment):

是持续交付的 “升级版”,如果流程足够成熟、自动化测试足够可靠,Jenkins 打完包直接自动部署到生产环境(比如服务器 1、服务器 2… ),全程不用人工干预。这一步追求 “极致自动化,代码合并后自动上线” ,适合成熟的高频迭代项目,像互联网大厂频繁发版的业务。

结合流程图看完整 CICD 闭环:

开发侧:程序员在本地写代码(工作区 [idea] ),提交到版本控制服务器,触发 CI 流程。
集成侧:Jenkins 自动拉取、打包、验证,把 “半成品” 变成 “可部署包”,完成 CI。
发布侧:包通过自动化手段推到测试 / 生产环境,完成 CD(交付或部署 )。
反馈侧:测试、前端等最终使用人员拿到部署好的环境,发现问题又能快速反馈给开发,进入下一轮迭代,形成 “开发→集成→部署→反馈→开发” 的闭环。

简单说,CICD 就是用自动化把 “写代码→上线可用” 的链路串起来,让开发更顺滑、迭代更快、问题更早暴露,特别适合团队协作、高频更新的项目(像互联网应用、 SaaS 系统 )。你可以理解成 “把手动干的‘代码整合、打包、部署’这些重复活,交给机器自动做,人只聚焦写业务逻辑” ,效率和稳定性都会飞升~

三、部署GitLab

1、基础环境配置

(1) 关闭防火墙及内核

hostnamectl set-hostname gitlab
bash
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config

(2) 解压并安装

tar zxf gitlab-ce-17.8.2.rpm.tar.gz
cd gitlab-ce-17.8.2.rpm
ls
dnf -y install gitlab-ce-17.8.2-ce.0.el9.x86_64.rpm

(3) 修改配置文件

vim /etc/gitlab/gitlab.rb

 external_url 'http://192.168.10.105' 是 GitLab 配置中的核心参数,用于指定 GitLab 服务对外提供访问的基础 URL

(4) 解决版本兼容问题

ln -s /usr/lib64/libcrypt.so.1 /usr/lib64/libcrypt.so.2

具体来说:

  • libcrypt.so 是系统中负责密码加密相关功能的共享库文件
  • 某些版本的 GitLab(或其依赖的组件)可能编译时依赖 libcrypt.so.2 这个库文件
  • 但部分 Linux 系统(如 CentOS 7 等)默认只安装了 libcrypt.so.1(通常是 glibc 提供的版本)
  • 通过创建从 libcrypt.so.1 到 libcrypt.so.2 的软链接,可以让依赖 libcrypt.so.2 的程序 “误以为” 找到了所需的库文件,从而避免因库版本不匹配导致的启动失败或功能异常

这个操作本质上是一种兼容处理,在系统库版本与软件依赖版本不一致时,通过链接方式临时解决依赖问题。如果系统环境允许,更规范的做法是安装对应版本的 libcrypt 库(如 libcrypt2)。

2、部署

(1) GitLib初始化

gitlab-ctl reconfigure

(2) 找到初始化密码

cat /etc/gitlab/initial_root_password
EDgqXDTjQnTGv/gMKYyFBS2yfp/BHaHntPA6cQ/e3to=

(3) 登录

(4) 修改root密码

四、jenkins部署

1、资源清单

操作系统配置主机名IP
openEuler 24.032C4Gjenkins192.168.10.104
openEuler 24.032C4Ggitlab192.168.10.105

2、基础环境

hostnamectl set-hostname jenkins
bash
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config

3、安装git

dnf -y install git

4、安装字体库

dnf -y install fontconfig

5、部署JDK

(1) 解压并移动到合适位置

tar zxf jdk-11.0.16.1_linux-x64_bin.tar.gz
mv jdk-11.0.16.1 /usr/local/java

(2) 设置环境变量

export JAVA_HOME=/usr/local/java
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH

(3) 加载环境变量

source /etc/profile

(4) 查看版本

java -version

6、部署Tomcat

tar zxf apache-tomcat-8.5.56.tar.gz
mv apache-tomcat-8.5.56 /usr/local/tomcat

7、部署Meven

(1) 解压并移动到合适位置

tar zxf apache-maven-3.6.0-bin.tar.gz
mv apache-maven-3.6.0 /usr/local/maven

(2) 设置环境变量

export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin

 (3) 加载环境变量

source /etc/profile

(4) 查看版本

mvn -version

(5) 修改配置文件

将Maven仓库改为国内
vim /usr/local/maven/conf/settings.xml
<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url>
</mirror>

8、部署nodejs(运行时) 

(1) 部署nodejs的依赖环境

dnf -y install gcc automake autoconf libtool

 (2) 解压并移动到合适位置

tar zxf node-v14.18.0-linux-x64.tar.gz
mv node-v14.18.0-linux-x64 /usr/local/nodejs14

(3) 优化路径并查看版本

ln -s /usr/local/nodejs14/bin/* /usr/local/bin
node -v

(4) 查看node包管理工具(构建工具)

npm -v

9、部署jenkins

mv jenkins.war /usr/local/tomcat/webapps/
cd /usr/local/tomcat/webapps/
ls
/usr/local/tomcat/bin/startup.sh

10、设置Jenkins插件更新源

cd
cd .jenkins/updates/
sed -i 's/https:\/\/www.jenkins.io/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
sed -i 's/https:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

11、找到初始密码

cat /root/.jenkins/secrets/initialAdminPassword

12、登录Jenkins

13、安装插件(选离线)

14、跳过在线安装插件

15、创建管理员用户生成永久链接

16、开始使用

17、后续如需安装插件

18、拉取本地插件(原先下载好的)


19、然后重启 Jenkins

/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

重新查看插件是否已经被添加

20、安装JDK

21、安装Maven

22、安装NodeJS

五、Jenkins角色与权限管理

        我们可以利用Role-basedAuthorization Strategy 插件来管理 Jenkins 用户权限,在前面的插件安装中已经安装过此插件。

1、全局安全配置

“Dashboard”-->“ManageJenkins”-->“Security”-->“Authentication”

将授权策略修改为“Role-Based Strategy”,并保存设置。

2、创建角色

为了更方便的为用户授权,jenkins 中使用角色作为一类权限的容器。角色是一组相关权限的集合。可以为用户指定角色,而不是直接指定权限。

(1) 角色种类

Global roles:Global roles(全局角色):管理员等高级用户可以创建基于全局的角色

Item roles:针对某个或者某些项目的角色

Agent roles:节点相关的权限

(2) 设置角色

“Dashboard”-->“Manage Jenkins”-->“Manage and AssingRoles”。点击“Manage Roles”

(3) 创建全局角色

        baseRole:该角色为全局角色。这个角色需要绑定 Overall 下面的 Read 权限,是为了给所有用户绑定最基本的 Jenkins 访问权限。注意:如果不给后续用户绑定这个角色,会报错误:用户名ismissing the Overall/Read permission

(4) 创建项目角色

role1:该角色为项目角色。使用正则表达式绑定"my-item01.*",意思是只能操作名称为“my-item01”开头的项目。

role2:该角色也为项目角色。绑定"my-item02.*",意思是只能操作“my-item02”开头的项目。

为角色分配权限

3、创建用户

(1) 添加用户

Dashboard”-->“Manage Jenkins”-->“Users”,在右上角点击“CreateUser”,创建用户。

添加两个用户zhangsan、lisi

(2) 用户绑定到角色

        “Dashboard”-->“Manage Jenkins”-->“Manage and Assign Roles”,然后点击“Assign Roles”。

zhangsan 用户绑定 baseRole role1 角色

4、创建项目

5、凭证管理

        有许多第三方网站和应用程序可以与Jenkins 进行交互,例如程序代码仓库,云存储系统和服务等。此类应用程序的系统管理员可以在应用程序中配置凭据以专供 Jenkins 使用。通常通过将访问控制应用于这些凭据来完成这项工作,以“锁定”Jenkins 可用的应用程序功能区域。一旦 Jenkins 管理员(即管理 Jenkins 站点的 Jenkins 用户)在 Jenkins 中添加/配置这些凭据,Pipeline 项目就可以 使用凭据与这些第三方应用程序进行交互。

用管理员登录到 jenkins。

        要在 Jenkins 使用凭证管理功能,需要安装 CredentialsBinding 插件,前面已经安装过此插件, 这里不再安装。

        凭据可以用来存储需要密文保护的数据库密码、Gitlab 密码信息、Docker 私有仓库密码等,以便Jenkins 可以和这些第三方的应用进行交互。

凭据的种类

        jenkins 提供了多种类型的凭据,适应与不同的业务需求,具体类型如下:

  • Username with password:用户名和密码
  • GitHub AppGitHub 应用进行身份验证
  • GitLab API token:存储 Gitlab 的用户API token
  • OpenShift Username and password:存储OpenShift 的用户名和密码
  • SSH Username with private key 使用 SSH 用户和密钥
  • Secret file:需要保密的文本文件,使用时Jenkins 会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的 Secret file 就会被删除。
  • Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github api token
  • Certificate:通过上传证书文件的方式

        其中,常用的凭证类型有:Username with password(用户密码)和 SSH Username with private key(SSH 密钥)。接下来以使用 Git 工具到 Gitlab 拉取项目源码为例,演示 Jenkins 的如何管理 Gitlab的凭证。

        注意:为了让 Jenkins 支持从 Gitlab 拉取源码,需要安装 Git 插件以及在 CentOS7 系统上安装 Git工具。

(1) 凭据的作用范围

        凭证具有与它们相关联的范围。这是一种表示它们如何才能被暴露的方式。Jenkins使用的主要范围有如下 2 种。

System(系统)

        顾名思义,这个范围与根上下文,也就是Jenkins 系统相关联。此范围中的凭证只被暴露给系统和后台任务,并且一般被用于连接到构建节点或代理节点等。

全局

全局范围是默认选项,通常用来确保 Jenkins中的任务可以使用凭证。

(2) 添加用户密码类型的凭据

添加凭据

        “Manage jenkins”-->“Credentials”,打开如下页面,并点击“System”,进入全局凭据管理界面,如下图所示。

在如下界面中,点击右上角的“Add Credentials”按钮,添加凭据

填写凭据参数

这里主要的内容有:

凭据类型:Username withpassword

范围:Global

用户名:root(该账号是 gitlab 中添加的账号)

密码:gitlab 中为 root 用户设置的密码(本案例此处为 pwd12345,注意不是系统的 root 密码

ID:选填(设置凭据的唯一标识,不设置会自行分配一个唯一标识)

描述:选填(凭据名称,此处最好填写一下,使用凭据的时候便于识别,不设置就使用用户名)

6、使用凭据

(1) 账号密码模式

创建test01任务

(2) 配置源码管理

登录gitlab

创建项目

导入一个项目

设置参数

(3)添加SSH类型的凭据

SSH 类型的凭据可以使Jenkins 在拉取gitlab 中的代码时使用秘钥对的方式,不仅实现了免密连接,同时也会对数据进行加密,是一种安全可靠的凭据方式。

在 jenkins 主机上以root 身份生成密钥对
ssh-keygen
cd
cd .ssh/
ls
cat id_ed25519.pub
cat id_ed25519

公钥
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHA8FJ6slmXppZahXmTtq/MLWLU9rBWIszNs2W7lE7EB root@jenkins
私钥
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACBwPBSerJZl6aWWoV5k7avzC1i1PawViLMzbNlu5ROxAQAAAJA1NAuONTQL
jgAAAAtzc2gtZWQyNTUxOQAAACBwPBSerJZl6aWWoV5k7avzC1i1PawViLMzbNlu5ROxAQ
AAAEAd5GuCXddppIoVcfLDaM4Gy3b7DznVapqX6rD2Rv8n3XA8FJ6slmXppZahXmTtq/ML
WLU9rBWIszNs2W7lE7EBAAAADHJvb3RAamVua2lucwE=
-----END OPENSSH PRIVATE KEY-----

将公钥存放的gitlab

        用 root 用户登录 gitlab,点击右上角的头像,在下拉菜单中点“preferences”,然后在左侧列表点击“SSH Keys”。

在Jenkins种添加SSH凭据

“Manage jenkins”-->“Credentials”,打开如下页面,并点击“System”,进入全局凭据管理界

添加凭据参数

这里主要的参数有:

类型:SSH

范围:Global

ID:可选

描述:可选

Username:root(这个秘钥对是用 root 的身份生成的)

Private Key:填写 root 生成的私钥。

创建test02任务

配置源码管理

        如果报一下错误可以使用Jenkins节点手动使用ssh登录一下

        在使用秘钥对时,要提前在 jenkins 主机上生成 gitlab 主机的 fingerprint,否则,此处会提示错误。错误信息如下:

        第一次连接的话可以看到提示: “Are yousure you want to continue connecting (yes/no)? yes”,输入 yes 并回车即可生成 gitlab 主机的 fingerprint。

发布结果

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

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

相关文章

Linux第十三讲:线程同步和互斥

Linux第十三讲&#xff1a;线程同步和互斥1.线程互斥1.1进程线程间的互斥背景概念1.2什么是锁1.2.1认识锁&#xff0c;理解锁2.线程同步2.1条件变量2.2生产和消费模型2.3基于阻塞队列(blockqueue)的生产消费模型2.3.1单生产&#xff0c;单消费的阻塞队列模拟实现2.3.2多生产&am…

SAP 简单的AMDP demo 练习使用

SAP AMDP&#xff08;ABAP Managed Database Procedure&#xff09;是SAP的一项先进技术&#xff0c;用于在SAP HANA数据库上执行高性能的数据库操作。它允许ABAP开发人员编写数据库过程&#xff0c;这些过程可以在数据库级别上执行&#xff0c;从而实现更快的数据处理和更高的…

Maven JAR Plugin 插件使用说明

Maven JAR Plugin 插件使用说明1 Maven JAR Plugin 插件地址2 Maven JAR Plugin 特点3 maven-assembly-plugin 的用法3.1 无依赖项 maven-jar-plugin 配置3.2 有依赖项 maven-jar-plugin 配置3.3 配合maven-dependency-plugin 将依赖复制到指定位置1 Maven JAR Plugin 插件地址…

QT+Yolov8 推理部署,ONNX模型 ,实例分割+目标检测

QTYolov8 实例分割、目标检测推理。QT源码。 程序准备/版本:QT creator QT6.8 编译器:MSVC2022 opencv:4.7 onnxruntime:1.16.0 cpu版本 QTyolo推理部署程序部分源码: #include "aitoolinterface.h" #include "ui_aitoolinterface.h" #include <QDebu…

【java实现一个接口多个实现类通用策略模式】

java实现同个接口多个实现类通用策略模式 项目业务中&#xff0c;有多个平台&#xff0c;多个平台直接有相同的业务&#xff0c;只有一个接口入口&#xff0c;但是 不同的平台入口&#xff0c;虽然接口相同&#xff0c;参数相同&#xff0c;但是各自的具体实现不同&#xff0c;…

leetcode-139. 单词拆分-C

暴力回溯回溯过程就是一个决策树模型&#xff0c;从所有选择中找到合适的继续&#xff0c;否则回到上一级继续。该方法思路简单&#xff0c;时间复杂度过高&#xff0c;大概1/4的用例超时。 bool backtrack(char *s, int cur, char** wordDict, int wordDictSize) {// 基线条件…

《彩色终端》诗解——ANSI 艺术解码(DeepSeek)

AIi诗解通吾灵&#xff0c;直抄原文享分玲。 笔记模板由python脚本于2025-08-18 23:35:59创建&#xff0c;本篇笔记适合喜欢诗&代码的coder翻阅。 学习的细节是欢悦的历程 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅仅是知识的简单复述。 Python官网…

抓包工具tcpdump详细指南

目录 1. 核心功能与特性 2. 关键参数速查表 3. 基础命令 3.1 协议/端口过滤 3.2 IP 地址过滤 3.3 高级逻辑组合 3.4 控制输出详细度 3.5 解析包内容 3.6 特殊包过滤 3.7 限制抓包数量 3.8 过滤特定大小包 3.9 过滤提升性能 ​​​​​​3.10 多网卡绑定 3.11 高级…

三高架构杂谈

我们的秒杀请求到了tomcat之后&#xff0c;我整个请求到了后端&#xff0c;我们怎么抗住高并发 也就是让他1s抗住10w的订单量&#xff0c;该怎么做 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>…

后端通用基础代码

后端通用基础代码 通用基础代码是指&#xff1a;“无论在任何后端项目中&#xff0c;都可以复用的代码。这种代码一般 “一辈子只用写一次” &#xff0c;了解作用之后复制粘贴即可&#xff0c;无需记忆。 目录结构如下&#xff1a;1、自定义异常 自定义错误码&#xff0c;对错…

基于51单片机WIFI心率计脉搏体温测量仪APP设计

1 系统功能介绍 本设计基于 STC89C52 单片机&#xff0c;结合 脉搏传感器、温度传感器 DS18B20、LCD1602 液晶显示器、WiFi 模块 等外设&#xff0c;构建了一个 WiFi 心率计脉搏体温测量仪 APP 系统。系统能够实现对人体心率与体温的实时采集、处理、显示和远程上传&#xff0c…

从零到一构建企业级GraphRAG系统:GraphRag.Net深度技术解析

当RAG遇上知识图谱&#xff0c;会碰撞出怎样的火花&#xff1f;本文将带你深入探索GraphRag.Net这个开源项目&#xff0c;看看如何用.NET技术栈打造一个企业级的图谱增强检索系统。 引言&#xff1a;为什么我们需要GraphRAG&#xff1f; 在AI大模型时代&#xff0c;RAG&#x…

前端Element-plus的选择器 el-select 清空内容时,后端对应的更新方式,支持更新为null

1、所属小类选择器 el-select 清空内容时&#xff0c;前端通过事件设置为空字符串clear"handleSmallCategoryClear"【所属小类选择器】只能选择&#xff0c;不能输入信息<script setup lang"ts" name"QualityFileInfoDialog"> ...... // 所…

【笔记】和各大AI大语言模型合作写项目—slirp.go

最近和各大AI大语言模型一起合作写了个小项目&#xff0c;让大家看看AI离取代人类还差多远。 开发大家都在一个共享环境下&#xff0c;连docker都不能运行&#xff0c;rootless也没有。不过好在linux环境&#xff0c;弄个proot能apt或者yum install自由&#xff0c;但是诸如pod…

国标:开展环境卫生满意度调查

随着社会的进步和人们生活水平的提高&#xff0c;&#xff08;满意度调查&#xff09;&#xff08;问卷调查&#xff09;&#xff08;第三方市场咨询公司&#xff09;对生活品质的追求以及对环境保护的重视已经成为了当下社会的主旋律。在这样的背景下&#xff0c;环境卫生问题…

【办公类-54-08】20250902 2025学年第一学期班级点名册模版(双休国定假涂成灰色、修改标题和页眉,批量导出PDF)根据新Excel模版,标题增加园区、空姓名行填充灰色

背景需求: 之前做了优化过的点名册 【办公类-54-07】20250901 2025学年第一学期班级点名册模版(双休国定假涂成灰色、修改标题和页眉,批量导出PDF)-CSDN博客文章浏览阅读984次,点赞27次,收藏29次。【办公类-54-07】20250901 202学年第一学期班级点名册模版(双休国定假…

【C++知识杂记1】智能指针及其分类

智能指针&#xff08;smart pointer&#xff09; 是 C11 引入的一类 模板类&#xff0c;用来封装原始指针&#xff0c;自动管理堆内存的生命周期&#xff0c;避免出现 内存泄漏 和 悬空指针&#xff08;野指针&#xff09; 的问题。 当智能指针对象离开作用域时&#xff0c;它会…

vue从入门到精通:搭建第一个vue项目

目录 Vue是什么 一、nodejs安装 二、安装Vue CLI 三、创建Vue项目 四、配置vue.config.js文件 五、创建第一个应用hello word Vue是什么 Vue是一款‌用于构建用户界面的 JavaScript 渐进式架构‌既可作为库(仅关注视图层)也可扩展为框架,支持从静态页面到复杂单页应用…

C# Queue源码分析

Queue<T> 是 .NET 中实现队列&#xff08;先进先出&#xff09;的一种泛型集合类。它基于数组实现&#xff0c;支持动态扩容、线程不安全&#xff0c;适用于大多数需要队列结构的场景。一、类结构与字段说明 public class Queue<T> : IEnumerable<T>, IColle…

微服务之注册中心与ShardingSphere关于分库分表的那些事

小伙伴们&#xff0c;你们好呀&#xff01;我是老寇&#xff01;跟我一起学习注册中心与ShardingSphere怎么一起使用 使用 nacos-shardingsphere例子&#xff0c;请点击我 注意&#xff1a;需要自己提前创建数据库和表 create database kcloud_platform_test;DROP TABLE IF…