Git/CICD/Jenkins相关知识的技术文档

一.git核心及常用命令

1. git核心概念

git是分布式版本控制,分布式简单来说就是每个开发者都拥有完整的仓库副本,支持离线操作,而版本控制就是记录文件内容发生的变化,便于回溯历史,协作开发。

2. git分布式版本控制和svn集中式版本控制的区别

git是每个开发者的电脑上都有一个完整的仓库副本,包含所有的代码和完整的历史记录,出同步外大多数操作都不需要联网,操作速度极快,没有绝对“中央”服务器的概念,同时每台电脑上都有完整的仓库副本,增加了容灾能力。
svn是有一个专门的中央服务器,保存所有代码的完成版本历史,所有的开发人员都直接与它交互,几乎所有操作都需要联网,速度较慢,同时极有可能会发生提交冲突,也可能会造成数据丢失。

3. 三大分区

工作区:实际的文件目录
暂存区:准备commit的文件快照
版本库:永久存储的数据结构

4. git工作流程以及常用命令

# 基础工作流
git init                   # 初始化仓库
git clone <url>             # 克隆远程仓库
git add <file>             # 添加到暂存区
git commit -m "message"     # 提交到版本库
git push origin main       # 推送到远程

#撤销/回退
撤销工作区的修改(未add的文件)
git checkout -- <filename> # 撤销指定文件的修改,直接丢弃
git restore <filename>     # 撤销修改,更推荐,文件会恢复到暂存区,不会丢弃

撤销暂存区的修改(已add未commit的文件)
git reset HEAD <filename>   # 将指定文件从暂存区移回工作区,但保留工作区的修改
git reset HEAD   # 将所有文件从暂存区移回工作区
git restore --staged <filename> # 将指定文件从暂存区移回工作区
git restore --staged .     # 将所有文件从暂存区移回工作区

撤销提交(已commit的文件)
git reset --soft HEAD~1     #撤销上一次提交,保留修改作为add状态
git reset --hard HEAD~1     #撤销上一次修改,丢弃苏哦有修改

撤销推送(已push的文件)
git revert <commit-hash>     #可以通过git log查看一下版本号

# 分支管理
git branch <name>           # 创建分支
git checkout <branch>       # 切换分支
git merge <branch>         # 合并分支
git rebase <branch>         # 变基操作

# 状态查看
git status                 # 查看状态
git log --oneline           # 简洁日志
git relog                  # 引用日志,记录苏哦有操作
git diff                   # 查看差异

5. git本地库和裸库的区别以及创建命令

本地库:包含工作区,可以查看和编辑文件。工作区就是你能看到和编辑的项目文件本身。.git文件做本版本库"数据库",隐藏在工作区的根目录下。

结构: 你的项目文件夹/ -> 里面是你的代码文件 + 一个隐藏的 `.git/` 文件夹。

创建命令:git init或者git clone

裸库:不包含工作区,不能进行常规文件的编辑和提交,常作为推送的目标。它只有.git文件夹里的内容,村放在你指定的目录下。无法在裸库中进行正常的git操作,因为他没有地方存放你要iu该的文件

结构:你的裸库名.git/ -> 直接就是 branches/, hooks/, objects/, refs/ 等文件夹。

创建命令:git init --bare或者git clone --bare

6. git标签

推荐在每次软件发布时创建标签,能更好的管理版本。

标签主要分为轻量标签和附注标签,辅助标签就是在创建标签时加上描述信息,需要使用GPG签名

标签管理

#创建轻量标签
git tag v1.0.0         #在当前提交上创建
git tag v1.0.0 <commit-hash>    #指定提交版本
#创建附注标签
git tag -s v1.0.0 -m "Signed release version 1.0.0"
#查看标签
git show <标签号>
#一次推送所有标签
git push origin --tags

7. git分支

分支:git中分支本质上是一个指向提交的可变指针,通常默认主分支时master或者main分支。

优点:1.成本低:创建分支只需要41字节文件,极快

2.隔离开发:不同功能在不同分支,互不干扰

3.并行工作:团队可以同时开发多个功能

4.安全实验,实验代码可以在独立分支,失败直接丢弃即可

分支管理:

#查看分支
git branch # 查看本地分支
git branch -a # 查看所有分支(包括远程)
git branch -v # 查看分支及其最新提交

#创建分支
git branch feature-auth     # 基于当前提交创建分支
git checkout -b feature-payment  # 创建并切换到新分支
git branch hotfix a1b2c3d # 基于特定提交创建分支

#切换分支
git checkout main
git switch main # Git 2.23+ 新命令,更安全
git checkout - #切换上一个分支

#删除分支
git branch -d feature-done    # 删除已合并的分支
git branch -D feature-experimental  # 强制删除未合并的分支

#合并分支
git merge feature-branch   #将fearure分支合并到当前分支

注:这些操作可以在gitlab的web界面进行操作哼简单

8. git工作流程

1.从仓库拉取最新代码:git pull origin main
2.创建功能分支,实现开发隔离,互补干扰:git checkout -b <新分支>
3.开发与提交:git add-->git commit -m "描述"
4.发起合并请求
5.代码审查
6.合并并进行构建,测试,部署完成删除分支

9. GitLab的备份和恢复

备份
gitlab-rake gitlab:backup:create
gitlab-backup create

可以通过编辑/etc/gitlab/gitlab.rb配置文件进行备份配置:
# 修改备份路径
gitlab_rails['backup_path'] = "/mnt/gitlab-backups"
# 设置备份保留时间(秒),默认7天
gitlab_rails['backup_keep_time'] = 604800
# 备份时归档权限(建议设置为 0600)
gitlab_rails['backup_archive_permissions'] = 0600
# 包含容器注册表
gitlab_rails['registry_enabled'] = true
# 包含包注册表  
gitlab_rails['packages_enabled'] = true

#自动备份:设置定时任务写进计划任务文件
0 2 * * * /opt/gitlab/bin/gitlab-backup create CRON=1


恢复
sudo gitlab-ctl stop puma     #停止相关服务
sudo gitlab-ctl stop sidekiq
sudo gitlab-ctl status    # 检查状态

sudo ls -lh /var/opt/gitlab/backups/  #查看备份文件是否存在

# 恢复指定备份(注意:不需要 .tar 扩展名)
sudo gitlab-backup restore BACKUP=1719392752_2024_06_26_15.0.0

# 强制覆盖恢复
sudo gitlab-backup restore BACKUP=1719392752_2024_06_26_15.0.0 force=yes

tar -xzf gitlab-config-1719392752.tar.gz -C /  #恢复配置文件
sudo gitlab-ctl reconfigure       # 重新配置 GitLab
sudo gitlab-ctl restart           #重启

恢复特定内容
sudo gitlab-backup restore BACKUP=1719392752_2024_06_26_15.0.0 SKIP=db    #跳过数据库,只恢复文件

二.CI/CD(持续集成/持续交付-持续部署)

持续集成:频繁集成代码到主干,自动化构建和测试,快速发现集成错误

持续交付:代码始终处于可部署状态,手动触发部署,通过所有流程后自动部署到生产环境

1. CI/CD流程

持续集成:开发者推送代码到git仓库,通过jenkins工具从gitlab仓库自动拉取新代码进行编译或构建(maven),通过测试文件进行代码检查和单元测试保证代码质量。
持续交付/部署:打包镜像推送到镜像仓库,自动将新镜像部署到测试环境进行API测试,E2E测试等更全面的测试,最终手动部署到预生产环境,进行最后的质量验证和性能测试,然后发布到生产环境。发布后通过prometheus和elk进行监控,同时要建立回滚机制,遇到问题能够快速回滚到上一个稳定版本。

2. CI/CD优势

1.快速发现问题,即使修改
2.减少集成问题,降低发布风险
3.自动化,提高效率
4.提升软件代码质量和发布信息

三.Jenkins

1. Webhooks(网络钩子)

webhooks相当与一个触发器,比如如果你在jenkins为一个仓库设置了钩子,当仓库发生变化时会自动触发这个钩子,告诉应该做什么,这个在创建webhooks的时候自己定义,比如自动拉取代码进行构建,提高自动化。

2. 构建化参数

构建参数是指在构建之前通过web表单为这次构建传入一些自定义的,动态的值。这些值会在构建过程中作为环境变量被你的构建脚本使用。

优势:提升灵活性。促进协助,可以与钩子结合使用,实现全自动化。

持续更新············


💡 感谢你读到这里!这篇《Git/CICD/Jenkins相关知识的技术文档》是我的用心分享,如果你觉得有收获,不妨:


点个「赞」或「分享」,让更多同路人相遇


🔍 关注我的博客,持续接收技术/成长类干货


💬 文末留言聊聊你的想法,或遇到的同类问题~


🔒 本文为原创,转载请保留原文链接(https://www.sensen.cyou/index.php/2025/11/03/hello-world/)与作者信息,感谢尊重与支持!


🌐 想找更多优质内容?点击进入博客主页探索吧~


评论

  1. 2 月前
    2025-11-03 20:10:08

    您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar

  2. lichu
    2 月前
    2025-11-03 20:47:39

    sd

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇