CI/CD中gitlab和jenkins讲解

news2024/9/21 20:18:38

一 CICD是什么

CI/CD 是指持续集成(Continuous Integration)和持续部署(Continuous Deployment)或持续交付(Continuous Delivery)

1.1 持续集成(Continuous Integration)

持续集成是一种软件开发实践,团队成员频繁地将他们的工作集成到共享的代码仓库中。其主要特点包括:

  1. 频繁提交代码:开发人员可以每天多次提交代码,确保代码库始终保持最新状态。

  2. 自动化构建:每次提交后,自动触发构建过程,包括编译、测试、静态分析等。

  3. 快速反馈:如果构建失败或测试不通过,能够快速地向开发人员提供反馈,以便及时修复问题。

1.2 持续部署(Continuous Deployment)

持续部署是在持续集成的基础上,将通过所有测试的代码自动部署到生产环境中。其特点如下:

1. 自动化流程:从代码提交到生产环境的部署完全自动化,无需人工干预。
2. 高频率部署:可以实现频繁的部署,使得新功能能够快速地提供给用户。
3. 风险控制:需要有强大的测试和监控体系来确保部署的稳定性和可靠性。

1.3 持续交付(Continuous Delivery)

持续交付与持续部署类似,但不一定自动部署到生产环境,而是随时可以部署。其重点在于确保软件随时处于可发布状态。

CI/CD 的好处包括:

1. 提高开发效率:减少手动操作和等待时间,加快开发周期。
2. 尽早发现问题:通过频繁的集成和测试,问题能够在早期被发现和解决。
3. 降低风险:减少了大规模部署时可能出现的问题,提高了软件的质量和稳定性。
4. 增强团队协作:促进团队成员之间的沟通和协作,提高团队的整体效率。

常见的 CI/CD 工具包括 Jenkins、GitLab CI/CD、Travis CI 等。这些工具可以帮助团队实现自动化的构建、测试和部署流程。

二 git工具使用

2.1  git简介

Git 是一个分布式版本控制系统,被广泛用于软件开发中,以管理代码的版本和变更。
主要特点:

- 分布式
  - 每个开发者都有完整的代码仓库副本,这使得开发者可以在离线状态下进行工作,并且在网络出现问题时也不会影响开发。
  - 即使中央服务器出现故障,开发者仍然可以在本地进行开发和查看项目历史。
- 高效的分支管理
  - Git 中的分支创建和切换非常快速和简单。开发人员可以轻松地创建新的分支来进行新功能的开发或修复 bug,而不会影响主分支。
  - 合并分支也相对容易,可以使用多种合并策略来满足不同的需求。
- 快速的版本回退
  - 如果发现某个版本存在问题,可以快速回退到之前的版本。
  - 可以查看每个版本的详细变更记录,方便了解代码的演进过程。
- 强大的提交管理
  - 每个提交都有一个唯一的标识符,可以方便地引用和查看特定的提交。
  - 提交可以包含详细的提交信息,描述本次提交的更改内容。
- 支持协作开发
  - 开发者可以将自己的更改推送到远程仓库,供其他开发者拉取和合并。
  - 可以处理多个开发者同时对同一文件进行修改的情况,通过合并冲突解决机制来确保代码的完整性。

Git必看秘籍:https://git-scm.com/book/zh/v2

2.2  git 工作流程

Git 有三种状态:已提交(committed)、已修改(modified) 和 已暂存(staged)。

  • 已修改表示修改了文件,但还没保存到数据库中。

  • 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

  • 已提交表示数据已经安全地保存在本地数据库中。

这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。

三 部署git

3.1 安装git
在rhel9的系统中默认自带git
[root@CICD-node1 ~]# dnf install git  -y

#设定命令补全功能
[root@CICD-node1 wang]# echo "source  /usr/share/bash-completion/completions/git" >> ~/.bashrc
[root@CICD-node1 wang]# source  ~/.bashrc

 

3.2 初始化

获取 Git 仓库通常有两种方式:

- 将尚未进行版本控制的本地目录转换为 Git 仓库。
- 从其它服务器克隆 一个已存在的 Git 仓库。比如: git clone 

初始化版本库

[root@CICD-node1 ~]# mkdir  wang
[root@CICD-node1 wang]# git init
提示:使用 'master' 作为初始分支的名称。这个默认分支名称可能会更改。要在新仓库中
提示:配置使用初始分支名,并消除这条警告,请执行:
提示:
提示:  git config --global init.defaultBranch <名称>
提示:
提示:除了 'master' 之外,通常选定的名字有 'main'、'trunk' 和 'development'。
提示:可以通过以下命令重命名刚创建的分支:
提示:
提示:  git branch -m <name>
已初始化空的 Git 仓库于 /root/wang/.git/

[root@CICD-node1 wang]# ls -a
.  ..  .git
[root@CICD-node1 wang]# ls .git/
branches  config  description  HEAD  hooks  info  objects  refs

#设定用户信息
[root@CICD-node1 wang]# git config --global user.name "wang"
[root@CICD-node1 wang]# git config --global user.email "wang@wang.org"

#查看当前文件状态
[root@CICD-node1 wang]# git status
位于分支 master

尚无提交

无文件要提交(创建/拷贝文件并使用 "git add" 建立跟踪)

[root@CICD-node1 wang]# git status -s		#简化输出

四 git的使用方法

4.1 常用方法
[root@CICD-node1 wang]# echo timnglee > README.md
[root@CICD-node1 wang]# git status
位于分支 master

尚无提交

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)
        README.md

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
[root@CICD-node1 wang]# git status -s
?? README.md					#??	新建文件未添加到版本库

[root@CICD-node1 wang]# git add README.md
[root@CICD-node1 wang]# git status  -s
A  README.md					#A 已添加到暂存区

#提交暂存区的数据
[root@CICD-node1 wang]# git commit -m "add README.md"
[master(根提交) 74625b0] add README.md
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

[root@CICD-node1 wang]# git status -s		#无任何显示,标识已经提交到版本库

#再次修改
[root@CICD-node1 wang]# vim README.md
timnglee
timnglee
[root@CICD-node1 wang]# git status -s
 M README.md									#右M 表示文件在工作区被修改

#撤销修改
[root@CICD-node1 wang]# git checkout -- README.md
从索引区更新了 1 个路径
[root@CICD-node1 wang]# cat README.md
timnglee

#从新修改
[root@CICD-node1 wang]# echo wang> README.md
[root@CICD-node1 wang]# git add README.md
[root@CICD-node1 wang]# git status -s
M  README.md									#左M表示文件已经在版本库中并被跟踪,

#从暂存区撤销
[root@CICD-node1 wang]# git restore --staged README.md
[root@CICD-node1 wang]# git status -s
 M README.md

#从新提交
[root@CICD-node1 wang]# git add README.md
[root@CICD-node1 wang]# git status -s
M  README.md

#更新
[root@CICD-node1 wang]# git commit -m "update v1"
[master 6a14bb5] update v1
 1 file changed, 1 insertion(+), 1 deletion(-)
 
[root@CICD-node1 wang]# git status -s

#更新文件
[root@CICD-node1 wang]# echo wang >> README.md
[root@CICD-node1 wang]# git add README.md
[root@CICD-node1 wang]# echo wang >> README.md
[root@CICD-node1 wang]# git status -s
MM README.md								#MM表示有一部分在暂存区,还有一部分没有提交

#如果现在提交只能提交在暂存区中的部分
[root@CICD-node1 wang]# git commit -m "update v2"
[master dc9b45f] update v2
 1 file changed, 1 insertion(+)
[root@CICD-node1 wang]# git status -s
 M README.md								#右M还在
 
 
#查看已暂存和未暂存的修改变化
[root@CICD-node1 wang]# echo wang >> README.md
[root@CICD-node1 wang]# git diff
diff --git a/README.md b/README.md
index 62be538..87bd0f6 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,3 @@
 wang
 wang
+wang

#跳过使用暂存区,只能在提交过的在版本库中存在的文件使用如果文件状态是“??”不能用此方法
[root@CICD-node1 wang]# git commit -a -m "update v3"
[master 3579560] update v3
 1 file changed, 1 insertion(+)

#撤销工作区中删除动作
[root@CICD-node1 wang]# touch lee.txt
[root@CICD-node1 wang]# git add lee.txt
[root@CICD-node1 wang]# git commit  -m "add lee.txt"
[master 16141e7] add lee.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 lee.txt
[root@CICD-node1 wang]# git status -s
 D lee.txt								#右D表示文件在工作区被删除
[root@CICD-node1 wang]# git checkout -- lee.txt
[root@CICD-node1 wang]# ls
dir1  lee.txt  README.md

#从版本库中删除文件
[root@CICD-node1 wang]# git rm lee.txt
rm 'lee.txt'
[root@CICD-node1 wang]# git status -s
D  lee.txt								#左D表示文件删除动作被提交到暂存区

[root@CICD-node1 wang]# git commit -m "delete lee.txt"
[master 85483db] delete lee.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 lee.txt
[root@CICD-node1 wang]# git status -s

#恢复从版本库中被删除的文件
[root@CICD-node1 wang]# git log			#查看操作日志
commit 85483db3cb7f543950f678b7d04b85daef96c248 (HEAD -> master)
Author: wang <wang@wang.org>
Date:   Wed Sep 11 01:52:49 2024 +0800

    delete lee.txt

commit 16141e793a06cdce042e203e5c4a78f8fc92736b
Author: wang <wang@wang.org>
Date:   Wed Sep 11 01:48:45 2024 +0800

    add lee.txt

commit 3579560e8307005cc26cf51f4decfe2024762d4c
Author: wang <wang@wang.org>
Date:   Wed Sep 11 01:46:38 2024 +0800

    update v3

commit dc9b45fea7284911e24733dce044ca18624e791b
Author: wang <wang@wang.org>
Date:   Wed Sep 11 01:32:43 2024 +0800

    update v2

commit 6a14bb58e424a96c3b18c694fbe444bd1e662605
Author: wang <wang@wang.org>
Date:   Wed Sep 11 01:28:35 2024 +0800

    update v1

commit 74625b07475241cea36cc23565ebd0eb7a95142c
Author: wang <wang@wang.org>
Date:   Wed Sep 11 01:18:56 2024 +0800

    add README.md


[root@CICD-node1 wang]# git reflog			#查看提交动作
85483db (HEAD -> master) HEAD@{0}: commit: delete lee.txt
16141e7 HEAD@{1}: commit: add lee.txt
3579560 HEAD@{2}: commit: update v3
dc9b45f HEAD@{3}: commit: update v2
6a14bb5 HEAD@{4}: commit: update v1
74625b0 HEAD@{5}: commit (initial): add README.md

#版本回退到删除之前
[root@CICD-node1 wang]# git reset --hard 16141e7
HEAD 现在位于 16141e7 add lee.txt
[root@CICD-node1 wang]# ls
dir1  lee.txt  README.md
 
4.2 git对于文件如何忽略

在做软件开发时对源码编译会产生一些临时文件,我们在提交时需要忽略这些临时文件

[root@CICD-node1 wang]# mkdir dir1/
[root@CICD-node1 wang]# touch dir1/.file2
[root@CICD-node1 wang]# git status -s
?? .file1
?? dir1/


[root@CICD-node1 wang]# echo .file1 > .gitignore
[root@CICD-node1 wang]# git status -s
?? .gitignore
?? dir1/
[root@CICD-node1 wang]# echo ".*" > .gitignore
[root@CICD-node1 wang]# git status -s

五 gitlab代码仓库

5.1 gitlab简介

 

- GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。
- GitLab 具有很多功能,比如代码托管、持续集成和持续部署(CI/CD)、问题跟踪、合并请求管理等。它可以帮助开发团队更好地协作开发软件项目,提高开发效率和代码质量。

官网:https://about.gitlab.com/install/

中文站点: https://gitlab.cn/install/

官方包地址:https://packages.gitlab.com/gitlab/gitlab-ce

5.2 gitlab 的部署实施

部署gitlab需要内存大于4G

#在安装包之前需配置好软件仓库来解决依赖性
[root@CICD-node1 ~]# yum install -y curl policycoreutils-python openssh-server perl

[root@CICD-node1 ~]# dnf install gitlab-ce-17.1.6-ce.0.el9.x86_64.rpm -y

5.2.2 配置gitlab
#修改配置文件
[root@CICD-node1 ~]# cd /etc/gitlab/
[root@CICD-node1 gitlab]# ls
gitlab.rb
[root@CICD-node1 gitlab]# vim gitlab.rb
32 external_url 'http://172.25.254.80'

#修改配置文件后需利用gitlab-crt来生效,
[root@CICD-node1 gitlab]# gitlab-ctl reconfigure

#执行命令成功后会把所有组件全部启动起来
5.2.3 登陆gitlab

用户名默认为 root 。如果在安装过程中指定了初始密码,则用初始密码登录,如果未指定密码,则系统会随机生成一个密码并存储在 /etc/gitlab/initial_root_password 文件中, 查看随机密码并使用 root 用户名登录。

#查看原始密码
[root@CICD-node1 gitlab]# cat /etc/gitlab/initial_root_password
# WARNING: This value is valid only in the following conditions
#          1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the first time (usually, the first reconfigure run).
#          2. Password hasn't been changed manually, either via UI or via command line.
#
#          If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.

Password: jN9lq6NSP8a2V+4n57djzWlEGP7RZ43DSIse8sXJGTQ=		#密码

# NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.

 登录

 设置语言

设置密码

 

5.3 在gitlab中新建项目
 
#生成sshd密钥
[root@CICD-node1 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:QuEqZNMwIrNC3yV1yPMhYBtxqyDO2mcdMH9/D07qjmo root@CICD-node1.wang.org
The key's randomart image is:
+---[RSA 3072]----+
|+.o  **+..       |
|o+.+o.**o.       |
|o.+o+oo.+ .      |
|+o...*.  .       |
| o. ..+ S        |
|.. . . + .       |
|. . o .   . +    |
|   o  E  . = o   |
|     ....o+ . .  |
+----[SHA256]-----+
[root@CICD-node1 ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDO2nM+6+YAYVqCag/AqAipxJFF8rA7Trj5jh16eg9kaiIH6ftCBIQKM2tSbm63j/QLahfZa5sA3EJvXm/9HgWgAuz1f6ATvxasSpTfkrshBnnfFlA2JVzh2EVTkD3rkiJoOSTs8GVSxotUhPy716qfQI9nnK3oXlQhcLTVxmHTxzNMKG2T8WZyNALnUxevf1LDfBHJZt+2DcYET16wf5BwqMbUQs3TRb2rrlXIzVM1wZDHXHog+AQrXUzESWYLQK22BS+4c4iHStjzN+/v/gqH9T8oTPrA+P9oHifzk8aLrdSKYSZttlYgt7QOEqD5BzaRq/yNxfRm7acvqZY4EhlaK1cw1QAmTYsnqbyWRCzIa/yWtH02atzVeP65zCeqBIEch7vqR2YG2M8CjCvWgrtps3b1M5Hn9lxzwegXYBxx7vXOrh6M49OdyD7HYpzA1ePhM0VAaauQnHzwlJMNtElz2gVVzk90d1ZcNBvwm+BK+njSQ/NZhQXKgxKVWwRA3p0= root@CICD-node1.wang.org

 上传公钥到gitlab中

下载项目

[root@CICD-node1 ~]# git clone  git@172.25.254.80:root/wang.git
正克隆到 'wang'...
The authenticity of host '172.25.254.80 (172.25.254.80)' can't be established.
ED25519 key fingerprint is SHA256:G3bSH82EUaYIfG+I6cDLyKgyKY2DngMYwt5U1Ch71jI.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.25.254.80' (ED25519) to the list of known hosts.
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
接收对象中: 100% (3/3), 完成.

[root@CICD-node1 ~]# ls -R
.:
wang

./wang:
README.md

[root@CICD-node1 ~]# cd wang/
[root@CICD-node1 wang]# ls
README.md
[root@CICD-node1 wang]# git remote -v
origin  git@172.25.254.80:root/wang.git (fetch)
origin  git@172.25.254.80:root/wang.git (push)


#文件提交
[root@CICD-node1 wang]# echo wang > wang
[root@CICD-node1 wang]# git add wang
[root@CICD-node1 wang]# git commit -m "add wang"
[main 6c08cbb] add wang
 1 file changed, 1 insertion(+)
 create mode 100644 wang
[root@CICD-node1 wang]# git push -u origin main
枚举对象中: 4, 完成.
对象计数中: 100% (4/4), 完成.
使用 4 个线程进行压缩
压缩对象中: 100% (2/2), 完成.
写入对象中: 100% (3/3), 274 字节 | 274.00 KiB/s, 完成.
总共 3(差异 0),复用 0(差异 0),包复用 0
To 172.25.254.80:root/wang.git
   2a97cba..6c08cbb  main -> main
分支 'main' 设置为跟踪 'origin/main'。

六 jenkins

6.1 jenkins 简介

- Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
- Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行

CI(Continuous integration持续集成)持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。

CD(Continuous Delivery持续交付) 是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中

 

6.2 部署 jenkins

软件下载:Download and deploy

jenkins需要部署在新的虚拟机中

[!WARNING]

jenkins需要部署在新的虚拟机中,建议最少4G内存,4核心cpu

#安装依赖包
[root@jenkins ~]# yum install fontconfig java-17-openjdk git

#安装jenkins
[root@jenkins ~]# dnf install jenkins-2.476-1.1.noarch.rpm

#启动jenkins
[root@jenkins ~]# systemctl enable --now jenkins.service

#查看原始密码
[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
b081aab333d24530a640e91579fdc6fc

 部署插件

 

6.3 jenkins 与gitlab的整合

这个错误的原因是因为本机没有gitlab上的sshkey  

[root@jenkins ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:WYl62PK9yE5QWuWRr6IKT7BJwkYpvmn1lAQa7W2js5s root@jenkins.timinglee.org
The key's randomart image is:
+---[RSA 3072]----+
| ...      o.     |
|  +..    +.o     |
|.+. ..  + +.     |
|=  ..+.B o  .    |
|.+o.ooB S  .     |
|.o+*o  =...      |
| ++ +. .o..      |
|.  =. .o . .     |
|   E+. .+ .      |
+----[SHA256]-----+
[root@jenkins ~]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDA1imI8HrTo8mc457kNDBPmGvSYSdEeXKE977DL1vTzG5KdICUn5Si3reddc1BUe6F+sKO1bKuh7f7QqZ79fbJVl2xOJjbf4d9XJKQQQs06aa72p2HfNVDdgA+u0vOPJ6NY2hmatmU98GtiBzAXbbq+qcK4hT28fS39GWNWjHhoKpvglxMMR+W6xWNQHMj/9aN9v7ggW9jRPmENXKbY+8k0j0sPOfapQvH2nqUbRBfl6Fv26ExerPLKeNzhWzNOSOWoz47OFF186W12z+NtV3RDBjxJK77hzkHCCT245kzfuY3ZN8f25aS5+RMr7eIfzWlmoaKHCVC3ltOz6LCRwV/ldKuBYSKwjN7HqYbhjCWIVA0pqQUdDGgYvCJiHA8zjzPYDMyNcCKhAlWbj3FwYhLfdkiO4UQXkNbosJtqLRVcKf04FoaeRKEQm1lYMaVvCn603g/H2srN5e/9Tf+ydPVGHMqrGHFyMiGrHGDEp6HxFP8L6mLylvnhZ0a9HVuDJ0= root@jenkins.timinglee.org

把此密钥添加到gitlab上即可

添加密钥凭据

添加完成后报错依然存在,因为ssh首次连接主机是需要签名认证,需要手动输入yes

还有两太主机之间一定要做好解析

[root@jenkins ~]# vim /etc/ssh/ssh_config
Host *
    StrictHostKeyChecking no

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

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

相关文章

“京东云深海数据平台” 焕新升级

深海数据平台 致力于为每一个数据客户提供灵活化、一站式、智能化的数据开发与管理工具。同时&#xff0c;根据客户行业提供成熟的数据业务全链路解决方案&#xff0c;包括数据集成、开发、元数据管理等功能&#xff0c;帮助数据开发人员快速高效地完成数据相关工作&#xff0c…

洁净区气流流型验证方案及注意事项 北京中邦兴业

洁净区气流流型验证方案及注意事项是确保洁净区环境符合规定标准的重要环节&#xff0c;以下是对此的详细阐述&#xff1a; 一、洁净区气流流型验证方案 1. 测试目的 验证洁净区内气流流型的均匀性和稳定性&#xff0c;确保洁净区内的空气流动符合设计要求&#xff0c;从而有…

uniapp登录页面( 适配:pc、小程序、h5)

<!-- 简洁登录页面 --> <template><view class"login-bg"><image class"img-a" src"https://zhoukaiwen.com/img/loginImg/2.png"></image><image class"img-b" src"https://zhoukaiwen.com/im…

Fisco Bcos 2.11.0通过网络和本地二进制文件搭建单机节点联盟链网络(搭建你的第一个区块链网络)

Fisco Bcos 2.11.0通过网络和本地二进制文件搭建单机节点联盟链网络(搭建你的第一个区块链网络) 文章目录 Fisco Bcos 2.11.0通过网络和本地二进制文件搭建单机节点联盟链网络(搭建你的第一个区块链网络)前言一、Ubuntu依赖安装二、创建操作目录, 下载build_chain.sh脚本2.1 先…

4G模块点对点传输手把手教程!如何实现远程设备直接通信

使用4G模块进行点对点传输&#xff0c;可以实现远程设备的直接通信&#xff0c;广泛应用于工业控制、远程监控、物联网等领域。本教程将详细讲解如何通过4G模块&#xff0c;构建设备之间的点对点&#xff08;P2P&#xff09;传输系统&#xff0c;从配置设备、建立通信通道到实际…

深度估计智能化的应用

深度估计是一种计算机视觉技术&#xff0c;用于确定图像中各个对象与观测点之间的距离。这项技术在许多应用中都非常关键&#xff0c;如机器人导航、自动驾驶汽车、3D重建和增强现实等。 在提到的“Depth on Demand (DoD)”方法中&#xff0c;使用了以下几种关键技术&#xff…

PyTorch demo——基于MLP的鸢尾花分类

系统框架 1. 数据集加载 继承torch.utils.data.Dataset类&#xff0c;重写__getitem__和__len__方法&#xff0c;并在__getitem__中预处理数据。 # load.py import torchclass IrisDataset(torch.utils.data.Dataset):def __init__(self, data_file, iris_class):super(IrisDa…

什么护眼台灯性价比高又好用?良心推荐五款性价比高的护眼台灯

在家里&#xff0c;灯具是属于离不开的家具&#xff0c;每个大大小小的地方都需要的照亮&#xff0c;所以一盏好灯是必不可少的&#xff0c;每个发挥着作用。而护眼台灯就起了一个保护眼睛的作用&#xff0c;可以保护我们在学习&#xff0c;阅读的时候提供一个合适的光线环境&a…

Elasticsearch知识点整理

数据分类 非结构化数据 全文数据。不定长或无固定格式 报错xml,HTML,Word结构化数据 行数据&#xff0c;由二维表结构来逻辑表达和实现的数据 非结构化数据 对于非结构化的数据 搜索主要有两种方法 顺序扫描全文检索 顺序扫描 一般不建议这么做。例如给你一张报纸&…

PHP一键寄送尽在掌中快递寄件小程序

一键寄送尽在掌中 —— 快递寄件小程序全体验 &#x1f31f; 开篇&#xff1a;告别繁琐&#xff0c;拥抱便捷新纪元 还在为寄快递而烦恼吗&#xff1f;排队等待、填写繁琐的单据、等待快递员上门...这些统统成为过去式&#xff01;“一键寄送尽在掌中快递寄件小程序”。它就像…

红光一字激光器在工业中的性能指标怎样

红光一字激光器作为现代工业中不可或缺的重要设备&#xff0c;以其独特的性能和广泛的应用场景&#xff0c;成为众多行业的首选工具。本文就跟大家详细探讨红光一字激光器在工业中的性能指标&#xff0c;以及这些指标如何影响其在实际应用中的表现。 光束质量 红光一字激光器以…

气膜体育馆:为学校打造智能化运动空间—轻空间

随着教育体制的逐步升级&#xff0c;学校在提升学生综合素质方面的需求日益增长&#xff0c;特别是在体育场地方面。气膜体育馆作为一种新型的运动空间形式&#xff0c;正在迅速成为学校体育设施的优选方案。凭借其快速搭建、节能环保等优势&#xff0c;气膜馆在全国各地的校园…

STM32 的 RTC(实时时钟)详解

目录 一、引言 二、RTC 概述 三、RTC 的工作原理 1.时钟源 2.计数器 3.闹钟功能 4.备份寄存器 四、RTC 寄存器 1.RTC_TR&#xff08;Time Register&#xff0c;时间寄存器&#xff09; 2.RTC_DR&#xff08;Date Register&#xff0c;日期寄存器&#xff09; 3.RTC_S…

R语言统计分析——功效分析(比例、卡方检验)

参考资料&#xff1a;R语言实战【第2版】 1、比例检验 当比较两个比例时&#xff0c;可使用pwr.2p.test()函数进行功效分析。格式为&#xff1a; pwr.2p.test(h, n, sig.level, power, alternative) 其中&#xff0c;h是效应值&#xff0c;n是各相同的样本量。效应值h的定义如…

性能测试-jmeter提取器(十三)

一、jmeter的常用关联 正则表达式提取器xpath提取器json提取器 二、正则表达式提取器 注&#xff1a;&#xff08;正则表达式的变量与引用的变量的区别&#xff1a;引用变量多加了"_1"后缀&#xff09; 需求&#xff1a;将www.itcast.cn网页时&#xff0c;<ti…

【JAVA开源】基于Vue和SpringBoot的校园管理系统

本文项目编号 T 026 &#xff0c;文末自助获取源码 \color{red}{T026&#xff0c;文末自助获取源码} T026&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 管…

每日一练:游游的u

1.题目 2.代码 #include <iostream> using namespace std;int main() {int q 0;cin >> q;int a,b,c;while(q--){cin >> a >> b >> c;int you min(a,min(b,c)) * 2;int ooo max(b-(you/2)-1,0);cout << (you ooo) << endl;}retu…

【计算机毕设-大数据方向】基于Hadoop的社交媒体数据分析可视化系统的设计与实现

&#x1f497;博主介绍&#xff1a;✌全平台粉丝5W,高级大厂开发程序员&#x1f603;&#xff0c;博客之星、掘金/知乎/华为云/阿里云等平台优质作者。 【源码获取】关注并且私信我 【联系方式】&#x1f447;&#x1f447;&#x1f447;最下边&#x1f447;&#x1f447;&…

[ComfyUI]Flux:写真新篇章!字节PuLID率先开启一致性风格迁移,无损画手和优质画面保持

前言 Flux&#xff1a;PuLID率先开启F1写真新篇章 所有的AI设计工具&#xff0c;模型和插件&#xff0c;都已经整理好了&#xff0c;&#x1f447;获取~ Flux PuLID简介 在Flux出来后短时间内&#xff0c;社区生态反响和发展足够的迅猛快速。至今为止&#xff0c;社区LORA模…

力扣每日一题:236.二叉树的最近公共祖先

题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以是它…