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

Git与DevOps实战:从版本控制到自动化部署

一、版本控制

1.什么是版本控制?

版本控制用于高效追踪和管理项目开发中的代码、配置及文档变更历史,确保团队成员始终使用正确版本,并支持版本回溯、差异比较和文件恢复。它能带来以下优势:通过历史记录保障数据安全与完整性;多分支开发机制提升团队协作效率;结合CI/CD工具实现自动化流程,简化复杂项目管理能力。

2.什么是版本控制系统?

版本控制工具用于管理代码变更,通过版本号或语义化标签标记不同开发阶段。它能完整记录文件修改历史,支持回退到任意历史版本。该工具允许多开发者协同工作,通过分支机制隔离不同功能开发,最终将所有变更合并至主分支。版本库是版本控制系统的核心。

3.什么是版本库?

版本库是版本控制系统的核心数据库,完整保存了项目文件及其变更历史,包括文件所有版本、元数据以及版本间的依赖关系。其核心特性包括:完整历史记录、分支与合并功能、分布式存储机制。

二、分布式版本控制Git

Git 是一款开源的分布式版本控制系统(DVCS),由 Linux 创始人 Linus Torvalds 在 2005 年开发。该系统能高效管理代码和文件变更历史,支持团队协作与并行开发。其分布式架构特性提供了强大的分支管理功能,可精准追踪每个版本的变化。

1.Git工作流

工作区(Workspace):存放从仓库中提取出来的文件的地方,供用户直接编辑。

暂存区(Index/Stage):文件变更暂存的区域,准备提交的文件信息。

仓库(Local Repository):存储所有版本数据和元信息的地方。

远程仓库(Remote Repository):托管在远程服务器上的共享仓库,供他人浏览、下载代码。

工作流程

2.Git版本库操作
# --local:仓库级(仓库目录下.git/config)
# --global:全局级(~/.gitconfig)
# --system:系统级(/etc/gitconfig)
git config --global user.name 用户名         #设置全局级用户名
git config --global init.defaultBranch 分支名     #设置全局默认分支名称
git config --list               #查看已有的Git配置

初始化版本库

git init 项目目录

查看Git本地仓库状态

git status

将文件信息添加到暂存区

git add 文件名

将暂存区文件提交到本地仓库并附加提交信息

git commit -m "提交信息"

查看本地Git版本库信息

git log                  #详细信息
git log --pretty=oneline         #简略信息
git log --oneline        #极简信息
3.Git指针操作

还原到指定版本

git reset --hard 版本id

获取指针移动轨迹

git reflog
4.Git分支操作

查看分支信息

git branch -v

创建分支

git branch 分支名

切换分支

git checkout 分支名

删除分支

git branch -d 分支名

合并分支到master中

git merge 分支名
5.Git标签管理

查看已有标签

git tag

创建标签

git tag 标签名

删除标签

git tag -d 标签名

三、Git服务器

Git 服务器是用于集中存储和管理 Git 仓库的核心节点,主要负责维护代码版本历史、支持团队协作开发。它通过标准协议与本地仓库进行数据交互,通常部署在独立服务器上,开发者可通过网络远程访问服务器中的代码仓库。常用的Git服务器有GitHub、Gitee码云、GitLab。

1.GitLab

DevOps一体化平台,集成代码托管、CI/CD、项目管理、安全扫描等生命周期工具,支持端到端软件交付,提供多层安全防护、操作审计日志及符合国内法规的数据存储方案。

2.代码托管
git remote add origin GitLub仓库项目地址         #关联远程项目
git push -u origin --all        #推送本地仓库所有分支
git push -u origin --tags       #推送本地仓库所有标签

http方式免密推送

git config --global credential.helper store       #持久保存密码设置

四、CI/CD

在DevOps理念推动下,持续集成(CI)、持续交付(CD)和持续部署(CD)等创新方法应运而生,显著提升了软件发布效率。CI的核心在于开发人员频繁提交代码至共享仓库,借助自动化构建和测试确保代码质量,有效规避集成问题。CD则更进一步,能够将验证通过的代码自动发布到存储库,实现生产环境的一键部署。而最高级别的持续部署则是全自动化流程,所有测试通过的代码将自动部署上线,完全无需人工参与。

1.DevOps流程

计划:项目初期,研讨业务需求,指定研发计划。

编码:开发团队基于项目需求编写业务代码,使用Git等工具进行版本控制。

构建:通过Maven,Docker等工具打包代码为可上线的产品。

测试:对产品进行自动化测试(如Jmeter)验证其功能和性能。

发布:生成通过测试后的稳定版本,准备进行部署。

部署:使用Ansible、Kubernetes等工具将产品自动发布到生产环境。

运营:运维团队监控产品在生产环境下的工作中状态,处理异常。

监控:使用Prometheus进行日志与指标的收集,反馈信息到计划阶段优化迭代。

2.Jenkins

Jenkins 是一款开源的 ‌持续集成/持续交付(CI/CD)‌ 自动化工具,基于 Java 开发,广泛应用于软件构建、测试和部署流程。支持Maven、Gradle等构建工具,能实现自定化编译与测试,监控Git的变更,触发预设的构建流程,快速测试代码质量,通过流水线(Pipeline)将构建好的产品部署到测试或生产环境。

五、Elasticsearch

Elasticsearch 是一个基于 ‌Lucene‌ 构建的开源分布式搜索引擎,专为‌全文检索、日志分析、复杂查询‌等高性能场景设计‌。具备分布式存储与计算的功能,实现数据自动分片并支持副本,提升可靠性与查询并行度,通过粉刺、标准化的词项映射,实现高效率全文检索,数据写入之后秒级可查,适用于日志监控等实时性要求较高的场景。

1.Elasticsearch服务配置
# vim /etc/elasticsearch/elasticsearch.yml 
node.name: Services                 #23行,ES节点名称
path.data: /var/lib/elasticsearch   #33行,ES数据存储路径
path.logs: /var/log/elasticsearch   #37行,ES日志存储路径
network.host: 0.0.0.0               #55行,监听地址
http.port: 9200                     #59行,HTTP端口
http.cors.enabled: true             #60行,开启HTTP跨域访问支持
http.cors.allow-origin: "*"         #61行,允许跨域的访问范围
启动Elasticsearch服务,设置服务开机自启动
systemctl enable elasticsearch --now
2.测试Ik分词器
curl -H "Content-Type: application/json" -XPOST http://localhost:9200/_analyze?pretty -d '
{"analyzer": "standard","text": "需要分析的文本内容"
}'
3.HEAD插件

导入ES-HEAD插件

podman load -i Elasticsearch/elasticsearch-head.tar

启动HEAD容器

podman run -d --name es-head --hostname es-head -p 9100:9100 localhost/elasticsearch-head:latest            

配置ES-HEAD跨域

#sed -n '59,61p' /etc/elasticsearch/elasticsearch.yml
http.port: 9200
http.cors.enabled: true            #开启http跨域支持
http.cors.allow-origin: "*"        #允许跨域的访问范围

六、消息队列

消息队列是一种进程之间通信机制,用于在不同进程或服务之间以异步、解藕的方式传递数据。其核心思想是将消息暂存与队列当中,由生产者和消费者按需处理,广泛应用于分布式系统和高并发场景‌。

1.消息队列特点

异步处理:生产者发送消息后无需等待消费者处理,提升系统响应速度‌。

应用解藕:生产者和消费者通过队列交互,降低模块间直接依赖‌。

流量削峰:缓存突发请求,避免系统因瞬间高并发崩溃。

2.RabbitMQ

RabbitMQ 是一款基于 AMQP(高级消息队列协议)的开源消息中间件,专为分布式系统设计,可实现高效可靠的消息传递。它支持多语言客户端接入,提供直观的可视化管理界面,并具备灵活的消息分发机制,同时支持集群部署和持久化存储。

3.工作模式

简单模式(Simple):生产者直接发送消息到对列,消费者从队列中消费,一对一通信。

工作队列模式(Work Queues):多个消费者共享一个队列,消息通过轮询或者权重分配。

发布/订阅模式(Fanout):交换机将消息广播到所有绑定的队列,无路由键匹配。

路由模式(Direct):交换机根据Routing Key精确匹配队列的Binding Key,实现点对点通信。

主题模式(Topic):通过通配符实现模糊匹配。

4.RabbitMQ部署

安装Erlang

dnf -y install erlang-25.2-1.el8.x86_64.rpm

安装RabbitMQ

dnf -y install rabbitmq-server-3.11.5-1.el8.noarch.rpm

启动网页管理插件

rabbitmq-plugins enable rabbitmq_management

创建用户

rabbitmqctl add_user 用户名

列出已有用户

rabbitmqctl list_users

为用户添加标签

abbitmqctl set_user_tags 用户名 标签
#超级管理员(administrator) 监控者(monitoring) 策略制定者(policymaker) 普通管理者(management) 其他(guest)

列出已有虚拟主机

rabbitmqctl list_vhosts 

创建虚拟机

 rabbitmqctl add_vhost /虚拟机名

设置用户对虚拟主机的所有权限

 rabbitmqctl set_permissions -p /主机名 用户名

查看用户权限

rabbitmqctl list_user_permissions 用户名
http://www.xdnf.cn/news/1402597.html

相关文章:

  • docker 启动一个clickhouse , docker 创建ck数据库
  • 介绍分布式事务之Seata
  • 【系统分析师】高分论文:论系统测试技术及应用
  • IAR工程如何搭建vscode+clangd编辑环境
  • day42-Ansible
  • “人工智能+”行动重磅发布!ElfBoard助力嵌入式教育智能化升级
  • 【Java】常见数据结构及方法
  • EVidenceModeler v2.1 安装与使用--生信工具58
  • 嵌入式开发学习 C++:day02
  • mysql(自写)
  • 10. 函数和匿名函数(二)
  • 数值分析——误差的来源与分类、误差的基本概念(绝对误差、相对误差、有效数字)
  • 国标调查:引领汽车消费市场健康发展的理性指南
  • 奥普新汽车声学测试方案书
  • 基于单片机温控风扇ds18b20系统Proteus仿真(含全部资料)
  • 矿物类型分类实战:从数据预处理到多模型对比
  • 计算机体系结构之流水线与指令级并行
  • 离线大文件与断点续传:ABP + TUS + MinIO/S3
  • Android FrameWork - 开机启动 SystemServer 进程
  • Science:机器学习模型进行遗传变异外显率预测
  • 项目管理的关键成功因素
  • 全栈开源,高效赋能——启英泰伦新官网升级上线!
  • 链表(1)
  • 继电器的作用、选型和测量-超简单解读
  • Preprocessing Model in MPC 3 - 基于同态加密的协议 - Over Rings 环
  • Rust 泛型:抽象与性能的完美融合(零成本抽象的终极指南)
  • 20250830_Oracle 19c CDB+PDB(QMS)默认表空间、临时表空间、归档日志、闪回恢复区巡检手册
  • 【MLLM】从BLIP3o到BLIP3o-NEXT:统一生成与理解
  • Elasticsearch logsdb 索引模式和 TSDS 的业务影响
  • WSL使用指南