CICD 持续集成与持续交付
一 、CICD是什么
CI/CD 是指持续集成(Continuous Integration)和持续部署(Continuous Deployment)或持续交付(Continuous Delivery)
1.1 持续集成(Continuous Integration)
持续集成是一种软件开发实践,团队成员频繁地将他们的工作集成到共享的代码仓库中。其主要特点包括:
- 频繁提交代码:开发人员可以每天多次提交代码,确保代码库始终保持最新状态。
- 自动化构建:每次提交后,自动触发构建过程,包括编译、测试、静态分析等。
- 快速反馈:如果构建失败或测试不通过,能够快速地向开发人员提供反馈,以便及时修复问题。
1.2 持续部署(Continuous Deployment)
持续部署是在持续集成的基础上,将通过所有测试的代码自动部署到生产环境中。其特点如下:
- 自动化流程:从代码提交到生产环境的部署完全自动化,无需人工干预。
- 高频率部署:可以实现频繁的部署,使得新功能能够快速地提供给用户。
- 风险控制:需要有强大的测试和监控体系来确保部署的稳定性和可靠性。
1.3 持续交付(Continuous Delivery)
持续交付与持续部署类似,但不一定自动部署到生产环境,而是随时可以部署。其重点在于确保软件随时处于可发布状态。
CI/CD 的好处包括:
- 提高开发效率:减少手动操作和等待时间,加快开发周期。
- 尽早发现问题:通过频繁的集成和测试,问题能够在早期被发现和解决。
- 降低风险:减少了大规模部署时可能出现的问题,提高了软件的质量和稳定性。
- 增强团队协作:促进团队成员之间的沟通和协作,提高团队的整体效率。
常见的 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
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
这里编写构建命令
下图命令为了便于演示
查看
相关文章:

CICD 持续集成与持续交付
一 、CICD是什么 CI/CD 是指持续集成(Continuous Integration)和持续部署(Continuous Deployment)或持续交付(Continuous Delivery) 1.1 持续集成(Continuous Integration) 持续集…...
“数据面”(Data Plane)是指负责实际数据处理和转发的部分
在计算机网络和服务架构中,“数据面”(Data Plane)是指负责实际数据处理和转发的部分。数据面负责执行具体的网络通信任务,如接收、处理和转发数据包。与数据面对应的是“控制面”(Control Plane)ÿ…...

面试题:MySQL你用过WITH吗?领免费激活码
感谢Java面试教程的Java多线程文章,点击查看>原文 Java面试教程,发mmm116可获取IDEA-jihuoma 在MySQL中,WITH子句用于定义临时表或视图,也称为公共表表达式(CTE)。它允许你在一个查询中定义一个临时结果…...
consul 介绍与使用,以及spring boot 项目的集成
目录 前言一、Consul 介绍二、Consul 的使用三、Spring Boot 项目集成 Consul总结前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是…...
Linux常用命令shell常用知识 。。。。面试被虐之后,吐血整理。。。。
Linux三剑客&常用命令&shell常识 Linux三剑客grep - print lines matching a patternsed - stream editor for filtering and transforming textawkman awk Linux常用命令dd命令ssh命令tar命令curl命令top命令tr命令xargs命令sort命令du/df/free命令 shell 知识functio…...
压力测试指南-压力测试基础入门
压力测试基础入门 在当今快速迭代的软件开发环境中,确保应用程序在高负载情况下仍能稳定运行变得至关重要。这正是压力测试大显身手的时刻。本文将带领您深入了解压力测试的基础知识,介绍实用工具,并指导您设计、执行压力测试,最…...

Linux:LCD驱动开发
目录 1.不同接口的LCD硬件操作原理 应用工程师眼中看到的LCD 1.1像素的颜色怎么表示 编辑 1.2怎么把颜色发给LCD 驱动工程师眼中看到的LCD 统一的LCD硬件模型 8080接口 TFTRGB接口 什么是MIPI Framebuffer驱动程序框架 怎么编写Framebuffer驱动框架 硬件LCD时序分析…...

QT:常用类与组件
1.设计QQ的界面 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> #include <QLineEdit> #include <QLabel>//自定义类Widget,采用public方式继承QWidget,该类封装了图形化界面的相关操作ÿ…...

企业内训|提示词工程师高阶技术内训-某运营商研发团队
近日,TsingtaoAI为某运营商技术团队交付提示词工程师高级技术培训,本课程为期2天,深入探讨深度学习与大模型技术在提示词生成与优化、客服大模型产品设计等业务场景中的应用。内容涵盖了深度学习前沿理论、大模型技术架构设计与优化、以及如何…...

K8S真正删除pod
假设k8s的某个命名空间如(default)有一个运行nginx 的pod,而这个pod是以kubectl run pod命令运行的 1.错误示范: kubectl delete pod nginx-2756690723-hllbp 结果显示这个pod 是删除了,但k8s很快自动创建新的pod,但是…...

数据结构:队列及其应用
队列(Queue)是一种特殊的线性表,它的主要特点是先进先出(First In First Out,FIFO)。队列只允许在一端(队尾)进行插入操作,而在另一端(队头)进行删…...

26个用好AI大模型的提示词技巧
如果你已深入探索过ChatGPT、Microsoft Copilot、风变AI等前沿的生成式AI工具,那么你对“prompt”(提示词)这一核心概念一定有自己的认知。 作为连接你与AI创意源泉的桥梁,“prompt”不仅是触发无限想象的钥匙,更是塑…...

线性表二——栈stack
第一题 #include<bits/stdc.h> using namespace std; stack<char> s; int n; string ced;//如何匹配 出现的右括号转换成同类型的左括号,方便我们直接和栈顶元素 char cheak(char c){if(c)) return (;if(c]) return [;if(c}) return {;return \0;/…...
浏览器发送请求后关闭,服务器的处理过程
之前在开发中,有些后端服务处理非常慢,页面可能会出现504 Gateway time-out的提示,或者服务器还没返回数据,浏览器就关掉了。我们只是看到了浏览器关掉,但是服务器和客户端的状态都是什么样的呢? 问题 在…...

tee命令:轻松同步输出到屏幕与文件
一、命令简介 tee 命令在 Linux 和 Unix 系统中用于读取标准输入的数据,并将其同时输出到标准输出和文件中。简单来说,tee 命令可以用来分割数据流,使其既能够被输出到屏幕,也能够被写入到文件中。 二、命令参数…...

【经验技巧】如何做好S参数的仿测一致性
根据个人经验,想要做好电路板S参数的仿测一致性,如下的相关信息必须被认真对待: 1. PCB叠构(Stack up),仿真模型需要保证设计参数与板厂供应商的生产参数完全一样,这些参数包括: 叠层结构数据;介电常数;损耗因子;蚀刻因子;表面粗糙度。 2. 仿真中,需要保证信号测试…...

js逆向——webpack实战案例(一)
今日受害者网站:https://www.iciba.com/translate?typetext 首先通过跟栈的方法找到加密位置 我们跟进u函数,发现是通过webpack加载的 向上寻找u的加载位置,然后打上断点,刷新网页,让程序断在加载函数的位置 u r.n…...

Spring Boot 进阶-Spring Boot的全局异常处理机制详解
我们知道在软件运行的过程中,总会出现各种各样的问题,各种各样的异常,而程序员的主要任务之一就是解决在程序运行过程中出现的这些异常。在很多程序员开发的代码中我们会看到在关键的地方为了保证程序能够有一个正常的反馈,大量地使用了try catch finally语句。 大量的try …...
滚雪球学MySQL[7.1讲]:安全管理
全文目录: 前言7. 安全管理7.1 用户与权限管理7.1.1 创建和管理用户7.1.2 权限分配与管理7.1.3 最小权限原则 7.2 安全策略配置7.2.1 使用加密连接7.2.2 强密码策略7.2.3 定期审计和日志管理 7.3 SQL注入防范7.3.1 使用预处理语句7.3.2 输入验证与清理7.3.3 最小化数…...
反射及其应用---->2
目录 1.使用类对象 1.1创建对象 1.2使用对象属性 1.3使用方法 2.反射操作数组 3.反射获得泛型 4.类加载器 4.1双亲委派机制 4.2自定义加载器 1.使用类对象 通过反射使用类对象,主要体现3个部分 创建对象,调用方法,调用属性ÿ…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...