CICD 持续集成与持续交付

一 、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,而不会影响主分支。
  • 合并分支也相对容易,可以使用多种合并策略来满足不同的需求。

快速的版本回退

  • 如果发现某个版本存在问题,可以快速回退到之前的版本。
  • 可以查看每个版本的详细变更记录,方便了解代码的演进过程。

强大的提交管理

  • 每个提交都有一个唯一的标识符,可以方便地引用和查看特定的提交。
  • 提交可以包含详细的提交信息,描述本次提交的更改内容。

支持协作开发

  • 开发者可以将自己的更改推送到远程仓库,供其他开发者拉取和合并。
  • 可以处理多个开发者同时对同一文件进行修改的情况,通过合并冲突解决机制来确保代码的完整性。

2.2 git 工作流程

​​请添加图片描述
Git 有三种状态:已提交(committed)、已修改(modified) 和 已暂存(staged)。

  • 已修改表示修改了文件,但还没保存到数据库中。
  • 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
  • 已提交表示数据已经安全地保存在本地数据库中。

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

三、部署git

3.1 安装git

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

3.2 初始化

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

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

初始化版本库

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

请添加图片描述

[root@node1 redhat]# ls -a
.  ..  .git
[root@node1 redhat]# ls .git/
branches  config  description  HEAD  hooks  info  objects  refs#设定用户信息
[root@node1 redhat]# git config --global user.name "Zheng"
[root@node1 redhat]# git config --global user.email "admin@163.com"

请添加图片描述

#查看当前文件状态
[root@node1 redhat]# git status
位于分支 master尚无提交无文件要提交(创建/拷贝文件并使用 "git add" 建立跟踪)[root@node1 redhat]# git status -s		#简化输出

四、git的使用方法

请添加图片描述

4.1 常用方法

[root@node1 redhat]# echo test > README.md
[root@node1 redhat]# git status
位于分支 master尚无提交未跟踪的文件:(使用 "git add <文件>..." 以包含要提交的内容)README.md提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

请添加图片描述

[root@node1 redhat]# git status -s
?? README.md					#??	新建文件未添加到版本库[root@node1 redhat]# git add README.md
[root@node1 redhat]# git status  -s
A  README.md					#A 已添加到暂存区#提交暂存区的数据

请添加图片描述

[root@node1 redhat]# git commit -m README.md
[master(根提交) 74625b0] add README.md1 file changed, 1 insertion(+)create mode 100644 README.md[root@node1 redhat]# git status -s		#无任何显示,标识已经提交到版本库

请添加图片描述

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

请添加图片描述

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

请添加图片描述

#重新修改
[root@node1 redhat]# echo timinglee> README.md
[root@node1 redhat]# git add README.md
[root@node1 redhat]# git status -s
M  README.md									#左M表示文件已经在版本库中并被跟踪,#从暂存区撤销
[root@node1 redhat]# git restore --staged README.md
[root@node1 redhat]# git status -sM README.md

请添加图片描述

#重新提交
[root@node1 redhat]# git add README.md
[root@node1 redhat]# git status -s
M  README.md#更新
[root@node1 redhat]# git commit -m "update v1"
[master 6a14bb5] update v11 file changed, 1 insertion(+), 1 deletion(-)[root@node1 redhat]# git status -s#更新文件
[root@node1 redhat]# echo TEST >> README.md
[root@node1 redhat]# git status -s
MM README.md								#MM表示有一部分在暂存区,还有一部分没有提交

请添加图片描述

#如果现在提交只能提交在暂存区中的部分
[root@node1 redhat]# git commit -m "update v2"
[master dc9b45f] update v21 file changed, 1 insertion(+)
[root@node1 redhat]# git status -sM README.md								#右M还在#查看已暂存和未暂存的修改变化
[root@node1 redhat]# echo TEST >> README.md
[root@node1 redhat]# git diff
diff --git a/README.md b/README.md
index b790601..415581a 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@testTESTTEST
+TEST

请添加图片描述

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

请添加图片描述

#撤销工作区中删除动作
[root@node1 redhat]# touch test
[root@node1 redhat]# git add test
[root@node1 redhat]# git commit -m "add test"
[master f6180d4] test:v11 file changed, 0 insertions(+), 0 deletions(-)create mode 100644 test
[root@node1 redhat]# git status -sD test								#右D表示文件在工作区被删除
[root@node1 redhat]# git checkout -- test
[root@node1 redhat]# ls
test  README.md#从版本库中删除文件
[root@node1 redhat]# git rm test
rm 'test'
[root@node1 redhat]# git status -s
D  test								#左D表示文件删除动作被提交到暂存区

请添加图片描述

[root@node1 redhat]# git commit -m "delete test"
[master 85483db] delete test1 file changed, 0 insertions(+), 0 deletions(-)delete mode 100644 lee.txt
[root@node1 redhat]# git status -s
#查看操作日志
[root@node1 redhat]# git log			
commit 85483db3cb7f543950f678b7d04b85daef96c248 (HEAD -> master)
Author: Zheng <admin@163.com>
Date:   Wed Sep 11 01:52:49 2024 +0800delete testcommit 16141e793a06cdce042e203e5c4a78f8fc92736b
Author: Zheng <admin@163.com>
Date:   Wed Sep 11 01:48:45 2024 +0800add testcommit 3579560e8307005cc26cf51f4decfe2024762d4c
Author: Zheng <admin@163.com>
Date:   Wed Sep 11 01:46:38 2024 +0800update v3commit dc9b45fea7284911e24733dce044ca18624e791b
Author: Zheng <admin@163.com>
Date:   Wed Sep 11 01:32:43 2024 +0800update v2commit 6a14bb58e424a96c3b18c694fbe444bd1e662605
Author: Zheng <admin@163.com>
Date:   Wed Sep 11 01:28:35 2024 +0800update v1commit 74625b0747524dwast6cc23565ebd0eb7a95643c
Author: Zheng <admin@163.com>
Date:   Wed Sep 11 01:18:56 2024 +0800add README.md

请添加图片描述

[root@CICD-node1 redhat]# git reflog			#查看提交动作
85483db (HEAD -> master) HEAD@{0}: commit: delete lee.txt
16141e7 HEAD@{1}: commit: add test
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@localhost redhat]# cat README.md 
test
[root@localhost redhat]# git reset --hard 1a8cd68
HEAD 现在位于 1a8cd68 README.md
[root@localhost redhat]# cat README.md 
test

请添加图片描述

4.2 git对于文件如何忽略

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

[root@node1 redhat]# mkdir dir1/
[root@node1 redhat]# touch dir1/.file2
[root@node1 redhat]# git status -s
?? .file1
?? dir1/[root@node1 redhat]# echo .file1 > .gitignore
[root@node1 redhat]# git status -s
?? .gitignore
?? dir1/
[root@node1 redhat]# echo ".*" > .gitignore
[root@node1 redhat]# git status -s

五、gitlab代码仓库

5.1 gitlab简介

在这里插入图片描述
GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。

  • GitLab 具有很多功能,比如代码托管、持续集成和持续部署(CI/CD)、问题跟踪、合并请求管理等。它可以帮助开发团队更好地协作开发软件项目,提高开发效率和代码质量。

官网
中文官网

5.2 gitlab 的部署实施

5.2.1 部署gitlab

部署gitlab需要内存大于4G

#在安装包之前需配置好软件仓库来解决依赖性
[root@gitlab-node1 ~]# yum install -y curl policycoreutils-python-utils openssh-server perl[root@gitlab-node1 ~]# dnf install gitlab-ce-17.1.6-ce.0.el9.x86_64.rpm -y

5.2.2 配置gitlab

#修改配置文件
[root@gitlab-node1 ~]# cd /etc/gitlab/
[root@gitlab-node1 gitlab]# ls
gitlab.rb
[root@gitlab-node1 gitlab]# vim gitlab.rb
32 external_url 'http://172.25.254.10'#修改配置文件后需利用gitlab-crt来生效,
[root@gitlab-node1 gitlab]# gitlab-ctl reconfigure

5.2.3 登陆gitlab

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

出于安全原因,24 小时后/etc/gitlab/initial_root_password 会被第一次 gitlab-ctl reconfigure 自动删除,因此若使用随机密码登录,建议安装成功初始登录成功之后,立即修改初始密码。

#查看原始密码
[root@gitlab-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: AZaolgpObfBH1QpAR7oVgCllL0jqBOwQ1AWC/lFAF1M=	#密码# NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.

在这里插入图片描述

登陆
在这里插入图片描述
设置语言
在这里插入图片描述
设置密码
在这里插入图片描述

5.3 在gitlab中新建项目

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
生成sshd密钥

#生成sshd密钥
[root@gitlab-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:hKQXb8Tylqry1ud82qszDNPHp1bMbtp0N8+ZFV2hUBE root@gitlab-node1
The key's randomart image is:
+---[RSA 3072]----+
|      o..  ..Eo. |
|     o.=.   . . .|
|    . oo+.   .  .|
|     . o+       o|
|       +S. o   ..|
|      + . o =   .|
|     o + . =. ..o|
|  . o ..=.+oo. o*|
|   +.  o=B++.  oo|
+----[SHA256]-----+[root@gitlab-node1 ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDUC5MQDTXAHxpH5ag5wIFqoCgutlOGcwOdM2g/+bcGrEs2gQ1/vUTdIX5X31As69a7atHcduRUpQWmtE7IX2MeFwjFTyZUWj6UjXFFi2zbBZM9vOkJrRnqlVzRUNldLUcfa0ThodtINJ/vJpaW3JwDbPNhSHqDle9TutYBDXil4wCcE6v5fyIwFf5iu+fif27hOStc5dTXsSt75fHwhGUGjKwyAa8jXhOeINvNY7wxTB+BFB/I9keHMVEgz/cmZx4fnRT6fRDBZOsW2SaMJYq/S9MPBLJVFEBvd9+12oKhORxWfIRYDbotJPYisDfOlMAs3qaoSVl5xnpRmetuydOviHrix5Asjky1Atjb2tiNq7cbquVhwI789T3MqbqBB8JfDWFJTEse5CWQFeDk1FfeosgZAFQ5iu/ZvIUxCTu2e5sN38eexrBXXEiqksG/qjV61Hd4FxqC8rbsazopQ1+TaWBMUbjxti5vtR0f+ksMlIpJredJY4QBU7dmHxq+XVE= root@gitlab-node1

上传公钥到gitlab中
请添加图片描述

请添加图片描述
下载项目

[root@gitlab-node1 ~]# git clone  git@172.25.254.10:root/redhat
正克隆到 'redhat'...
The authenticity of host '172.25.254.10 (172.25.254.10)' can't be established.
ED25519 key fingerprint is SHA256:ov5ncy/2ZvbULX/pM00/gNAp6EIEv1j6jWYEnctTeX8.
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.1![请添加图片描述](https://i-blog.csdnimg.cn/direct/191c6601b624476f9a1a21b4b3784c04.png)
0' (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@gitlab-node1 redhat]# ls
README.md  test.txt
[root@gitlab-node1 redhat]# git remote -v   #列出当前仓库中已配置的远程仓库,并显示它们的 URL。
origin	git@172.25.254.10:root/redhat (fetch)
origin	git@172.25.254.10:root/redhat (push)
[root@gitlab-node1 redhat]# ls
README.md  test.txt
[root@gitlab-node1 redhat]# git add test.txt 
[root@gitlab-node1 redhat]# git commit -m "add test.txt"
[main e699644] add test.txt1 file changed, 1 insertion(+)create mode 100644 test.txt
[root@gitlab-node1 redhat]# git push -u origin main
枚举对象中: 4, 完成.
对象计数中: 100% (4/4), 完成.
使用 4 个线程进行压缩
压缩对象中: 100% (2/2), 完成.
写入对象中: 100% (3/3), 283 字节 | 283.00 KiB/s, 完成.
总共 3(差异 0),复用 0(差异 0),包复用 0
To 172.25.254.10:root/redhat1ec5c62..e699644  main -> main
分支 'main' 设置为跟踪 'origin/main'

在这里插入图片描述
成功
在这里插入图片描述

六、jenkins

6.1 jenkins 简介

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

CI(Continuous integration持续集成)持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。
在这里插入图片描述
CD(Continuous Delivery持续交付) 是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中CD(Continuous Delivery持续交付) 是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中

在这里插入图片描述

6.2 部署 jenkins

#安装依赖包
[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
71c6c5421b36499db1afafaf7ed09bb4

只有当jenkins启动后 /var/lib/jenkins/ 才有数据

部署插件
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

如需重新配置
先将jenkins停止,删除/var/lib/jenkins/下的所有文件,再重启即可

systemctl stop jenkins.service
rm -rf /var/lib/jenkins/*
systemctl start jenkins.service

  • 如果默认情况下插件无法下载
    • 方法一:可编辑 /var/lib/jenkins/hudson.model.UpdateCenter.xml 修改下载源
    • 方法二:可将插件放在/var/lib/jenkins/plugins下,需要重启Jenkins

七、jenkins 与gitlab的整合

请添加图片描述
请添加图片描述
请添加图片描述
第三步URL在gitlab上获取
在这里插入图片描述

报错原因是因为没有gitlab上的sshkey

生成密钥

[root@jenkins 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:iQewC2ZBawlBviIiRMPn8X3ij8IR3BapRdBa89qc8kY root@jenkins
The key's randomart image is:
+---[RSA 3072]----+
|=*o ..+..        |
|oo.* o B         |
| oX = O +        |
|.+.o B B +       |
|=.  . = S .      |
|=    . = E       |
|    . . *        |
|     o . +       |
|      . .        |
+----[SHA256]-----+
[root@jenkins jenkins]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCmuCvcqQNbVoSqeqtDNktXSl4Y4KZRQfv4DgSO9qxRIEVowrqKZ+3hUJ+ZiBf7MH7h4CjIDQr3DE+4QWy/ijG1t5UGQHARuVenjqksZIonM7GQjd6gDcHSukKiehRIhYyD1ADVpOsrwzJao32RbslCkt/DrFYjh5Lh/iybhrG1bPL/jRU6U+Wr4iEZxGroE9jTQp1QBpEnxjrviRd21LMANszAbkold1zOXFmfVXhlSIPzjSEHhvP6507/g+sDOF50qe7CZ4OJO9pqW+wNfason5oD8ISHKPKb+C0AWfniBGXvquqfhtm+WvlWBNdzYZWzfiLvXNqni8Nmxq/9U4d0tje8jI6sAxIsRQcQMspyaG9/FJOLP7RCyP4a2NLIwfWM7B7BRcbyhbZA2yNxraBBc4WGS8Y4lfmqB56RtPwzzL7v/FZHJwohqAzTzBk/NgWBEun+Xb20LhDIuGSzK8HuCEpROmxYqcwp4VkbtfjHHBO/MKh5wNeXkYB6S8z0ilc= root@jenkins

在gitlab上添加密钥
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

在这里插入图片描述

如未变化刷新即可
在这里插入图片描述
分支选择
由于gitlab为main
在这里插入图片描述
Jenkins选择main
在这里插入图片描述
在这里插入图片描述
这里编写构建命令

下图命令为了便于演示
在这里插入图片描述
查看
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

OpenSource - 开源WAF_SamWaf

文章目录 PreSafeLine VS SamWaf开发初衷软件介绍架构界面主要功能 使用说明下载最新版本快速启动WindowsLinuxDocker 启动访问升级指南自动升级手动升级 在线文档 代码相关代码托管介绍和编译已测试支持的平台测试效果 安全策略问题反馈许可证书贡献代码 Pre Nginx - 集成Mod…

游戏开发2025年最新版——八股文面试题(unity,虚幻,cocos都适用)

1.静态合批与动态合批的原理是什么&#xff1f;有什么限制条件&#xff1f;为什么&#xff1f;对CPU和GPU产生的影响分别是什么&#xff1f; 原理&#xff1a;Unity运行时可以将一些物体进行合并&#xff0c;从而用一个描绘调用来渲染他们&#xff0c;就是一个drawcall批次。 限…

OpenGL ES 绘制一个三角形(2)

OpenGL ES 绘制一个三角形(2) 简述 本节我们基于Android系统&#xff0c;使用OpenGL ES来实现绘制一个三角形。在OpenGL ES里&#xff0c;三角形是一个基础图形&#xff0c;其他的图形都可以使用三角形拼接而成&#xff0c;所以我们就的案例就基于这个开始。 在Android系统中…

Java项目实战II基于Java+Spring Boot+MySQL的厨艺交流平台设计与实现(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在美食文化…

计算机毕业设计 基于Python的热门微博数据可视化分析系统的设计与实现 Python+Django+Vue 可视化大屏 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

OJ在线评测系统 前端创建题目(增) 更新题目(改) 题目列表(查) 以及做题页面的开发 基于VUECLI脚手架画界面

目录 前端创建页面的开发一 创建一个路由 用acro design写 前端创建页面的开发二 题目管理页面 搜索 最終效果 题目更新页面的开发 携带参数的那种 修改路由 页码更新细节 我们先处理菜单项的权限控制和权限隐藏 在这里改 属性绑定一个函数 可以参考聚合搜索项目…

Jenkins入门:从搭建到部署第一个Springboot项目(踩坑记录)

本文讲述在虚拟机环境下(模拟服务器)&#xff0c;使用docker方式搭建jenkins&#xff0c;并部署一个简单的Springboot项目。仅记录关键步骤和遇到的坑 目录 一、环境准备和基础工具安装 1. 环境 2. yum安装 3. docker安装 4. 内网穿透工具安装natapp 二、jenkins安装和配置…

毕业设计选题:基于ssm+vue+uniapp的校园二手交易平台小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

操作系统与进程

1.操作系统 操作系统是计算机中的一个重要软件&#xff0c;它是一个专门进行管理的软件。操作系统可以通过驱动程序来间接管理外部硬件&#xff0c;也可以为计算机中的程序提供一个稳定的运行环境&#xff0c;从而来方便管理各种程序的运行&#xff0c;让程序之间的运行互不影…

上交所服务器崩溃:金融交易背后的技术隐患暴露杭州BGP高防服务器43.228.71.X

一、上交所宕机事件始末 2024 年 9 月 27 日&#xff0c;上交所交易系统突发崩溃&#xff0c;这一事件犹如一颗巨石投入平静的湖面&#xff0c;引起了轩然大波。当天上午&#xff0c;众多投资者反馈券商交易出现延迟问题&#xff0c;随后上交所发布了《关于股票竞价交易出现异常…

AI驱动的Java开发框架:Spring AI Alibaba实战部署教程

前言 随着生成式 AI 的快速发展&#xff0c;基于 AI 开发框架构建 AI 应用的诉求迅速增长&#xff0c;涌现出了包括 LangChain、LlamaIndex 等开发框架&#xff0c;但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言&a…

敏感字段加密 - 华为OD统一考试(E卷)

2024华为OD机试(E卷+D卷+C卷)最新题库【超值优惠】Java/Python/C++合集 题目描述 【敏感字段加密】给定一个由多个命令字组成的命令字符串: 1、字符串长度小于等于127字节,只包含大小写字母,数字,下划线和偶数个双引号; 2、命令字之间以一个或多个下划线 进行分割; 3、可…

【JavaSE系列】IO流

目录 前言 一、IO流概述 二、IO流体系结构 三、File相关的流 1. FileInputStream 2. FileOutputStream 3. FileReader 4. FileWriter 四、缓冲流 五、转换流 1. InputStreamReader 2. OutputStreamWriter 六、数据流 七、对象流 八、打印流 九、标准输入输出流…

Apache APISIX学习(2):安装Grafana、prometheus

一、Grafana安装 1、介绍 Grafana 是一个监控仪表系统&#xff0c;它是由 Grafana Labs 公司开源的的一个系统监测 (System Monitoring) 工具。它可以大大帮助你简化监控的复杂度&#xff0c;你只需要提供你需要监控的数据&#xff0c;它就可以帮你生成各种可视化仪表。同时它…

Deep Learning for Video Anomaly Detection: A Review 深度学习视频异常检测综述阅读

Deep Learning for Video Anomaly Detection: A Review 深度学习视频异常检测综述阅读 AbstractI. INTRODUCTIONII. BACKGROUNDA. Notation and TaxonomyB. Datasets and Metrics III. SEMI-SUPERVISED VIDEO ANOMALY DETECTIONA. Model InputB. MethodologyC. Network Archite…

基于Python实现的国庆节庆祝小程序

祖国母亲即将迎来75周年华诞&#xff0c;在这个特殊的日子里&#xff0c;我们可以用编程的方式来表达对祖国的祝福。本文将使用Python编写一个简单的国庆节庆祝小程序&#xff0c;通过一些编程技巧和设计为国庆节增添一些程序员的特色。 ⭕️庆祝国庆 ⭐️ 程序设计思路&#x…

828华为云征文|部署个人知识管理系统 SiyuanNote

828华为云征文&#xff5c;部署个人知识管理系统 SiyuanNote 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 SiyuanNote3.1 SiyuanNote 介绍3.2 SiyuanNote 部署3.3 Siyua…

大数据毕业设计选题推荐-重庆旅游景点数据分析系统-Python-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

基于微信开发助手企鹅音乐微信小程序的设计与实现(源码+文档+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

这条挣钱的路,离我好遥远啊

近日&#xff0c;笔者在发表的《乱篇弹&#xff08;54&#xff09;让子弹飞》一文中写道&#xff1a;“ 当然&#xff0c;笔者在《博客中国-狼头长啸的作家专栏》耕耘期间&#xff0c;也赚了一些用以补贴自己养老的‘ 散碎银两’。那么笔者是否可以依照知乎网的‘申请开通权限’…