Linux环境搭建git服务器和代码自动化部署

在开发过程中,我们经常遇到的问题就是提交代码到测试地址,然后进行线上测试。

要实现Git代码的自动化部署,考虑以下几种方法

  • FTP提交:可以使用FTP将代码上传到服务器
  • 自动化部署工具:如Jenkins、当代码被推送到仓库时,工具会自动拉取最新代码,进行构建,并部署到服务器上
  • 使用定时任务:使用任务计划程序来设置定时任务,定期执行Git命令
  • 使用Webhooks:在你的代码仓库(如GitHub、GitLab或Bitbucket)中设置一个Webhook,当代码仓库有新的提交时,Webhook会发送一个HTTP POST请求到你指定的URL。在你的服务器上设置一个监听该URL的服务,当接收到Webhook的请求时,服务可以自动执行git pull来更新服务器上的代码。

今天我们使用git本身的一个功能来实现,post-receive 是一个非常有用的钩子(hook),它在代码被推送到服务器上的Git仓库后执行。这个钩子通常用于自动化部署流程。当新的代码被推送到服务器上的仓库时,post-receive 钩子可以触发一系列脚本或命令,比如自动拉取最新的代码更改并部署到生产环境。


1.git安装

1.1 Linux环境安装

# 1.依赖包
yum install -y wget
yum install -y gcc-c++
yum install -y zlib-devel perl-ExtUtils-MakeMaker# 2.编译安装
# 下载最新git
cd /usr/local/src
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.0.tar.gz# 编译安装git
tar -zxvf git-2.9.0.tar.gz
cd git-2.9.0
./configure --prefix=/usr/local/git
make
make install# 3.添加环境变量
# 将 /usr/local/git/bin 加到后面,用:隔开
vim /root/.bash_profile    
PATH=$PATH:$HOME/bin:/usr/local/git/bin 
# 重启
source /root/.bash_profile# 4.git用户
#添加用户
usermod git
Passwd  git#禁止该用户shell登陆
vi /etc/passwd
git:x:1001:1001::/home/git:/usr/local/git/bin/git-shell

1.2 windows本地安装

下载地址 https://git-scm.com/downloads/win

windows环境,下载安装文件后,一步步安装就可以了

在命令提示符或PowerShell中输入git --version,如果安装成功,它会显示安装的Git版本。

2.git配置

2.1 Linux环境配置

1.设置全局用户名
git config --global user.name "Your Name"2.设置全局邮箱
git config --global user.email "youremail@example.com"3.设置默认文本编辑器
git config --global core.editor "xx"4.设置提交信息的默认字符编码
git config --global i18n.commitencoding utf-8

2.1 windows本地配置

大部分配置在安装时已经设置了,但是需要配置用户与邮箱,这个配置与Linux一样

git config --global user.name "Your Name"
git config --global user.email "youremail@example.com"

 两个环境下都可以配置Git别名

git config --global alias.co 'checkout'
git config --global alias.br 'branch'
git config --global alias.ci 'commit'
git config --global alias.st 'status

3.配置证书认证

3.1 本地生成证书

本地创建密匙文件,输入命令后,直接回车,一直到结束

ssh-keygen -t rsa -C "your_email" 

该命令会产生两个文件: id_rsa对应私钥,id_rsa.pub对应公钥。将id_rsa.pub中的内容写到服务器的authorized_keys文件中。如果有多个客户端,那么在authorized_keys文件中,一行保存一个客户端的公钥

同时在C盘用户目录下有.ssh文件夹下,生成2个文件

3.2 证书上传

将生成的id_rsa.pub上传到服务器上

  •  服务器创建目录地址
/home/git/.ssh/authorized_keys
  • 创建authorized_keys文件
cd /home/git
mkdir .ssh
chmod 700 .ssh
touch .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
cd /home
chown -R git:git git
  • 本地rsa文件上传到服务器
 ssh git@182.61.136.xxx 'cat >>.ssh/authorized_keys' < ~/.ssh/id_rsa.pub

3.3 证书认证

  • Linux服务器配置RSA

进入 /etc/ssh 目录,编辑文件sshd_config,打开以下三个配置的注释:

RSAAuthentication yes  #最新版centos7.4无需配置、没有的不配置
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
  •  保存并重启 sshd 服务
service sshd restart 

4.代码自动同步

4.1 部署Git服务器代码仓库

通过以上步骤的配置后,我们可以在服务器上创建git仓库地址了

  • 创建仓库地址
cd /home
mkdir mycode
  • 更改文件所属用户 
chown git mycode/                    
  •  初始化仓库
cd mycode
git init --bare test.git             
  •  更改仓库文件所属用户
chown -R git test.git                
  • 本地克隆git项目 
git@192.168.0.25:/home/mycode/test.git

4.2 部署网站

  • 创建网站代码目录
cd /home    
mkdir www
  •  更改所属用户
chown git www/
  •  初始化网站git仓库及更改其所属用户
cd www
#注意,这里要初始化为一般仓库而非裸仓库
git init
chown -R git .git

网站目录一定要改成用户git,否则可能自动拉取不生效

4.3 代码自动化脚本

  • git服务器仓库中配置hooks
cd /home/mycode/test.git/hooks
  • 编辑文件post-receive
vi post-receive
  • 自动化内容
unset GIT_DIR
#进入网站代码目录
cd /usr/local/apache/htdocs/wsx
#执行git pull命令,拉取git服务器仓库地址
git pull /home/mycode/pp.git master
#返回仓库并退出
cd /home/mycode/pp.git
exit 0
  • 设置执行权限
chmod +x /home/mycode/test.git/hooks/post-receive

配置完后,我们进行测试:

  • 首先我们拉取服务器git仓库地址,将代码下载到本地
  • 然后,我们新建一个文件提交到仓库
  • 在网站代码目录查看文件是否存在,如果存在则整体配置成功,如果没有就需要逐步检查,看那个环节有错误,进行修改,一定要用注意目录的用户权限

5.Git常用命令

5.1 基本git基础命令

  • 初始化仓库
git init
  • 克隆远程仓库
git clone [url]
  • 查看文件状态

git status
  •  添加文件到暂存区
git add [file]
  • 提交更改到本地仓库
git commit -m "commit message"
  • 查看提交历史日志
git log

5.2 分支管理

  • 查看分支
git branch
  • 创建分支
git branch [branch-name]
  • 切换分支
git checkout [branch-name]
  • 创建并切换分支
git checkout -b [branch-name]
  • 合并分支
git merge [branch-name]
  • 删除分支
git branch -d [branch-name]

5.3 远程仓库

  • 查看远程仓库
git remote -v
  • 添加远程仓库
git remote add [remote-name] [url]
  • 拉取远程仓库的更新
git pull [remote-name] [branch-name]
  • 推送到远程仓库
git push [remote-name] [branch-name]
  • 删除远程分支
git push [remote-name] --delete [branch-name]

5.4 撤销操作

  • 撤销工作目录的更改
git checkout -- [file]
  • 撤销暂存区的更改
git reset HEAD [file]
  • 撤销最近的提交
git reset --soft HEAD~1
  • 撤销所有未提交的更改
git reset --hard
  • 撤销到特定提交
git reset --hard [commit-hash]

5.4 查看差异

  • 查看工作目录与暂存区的差异
git diff
  • 查看暂存区与最后一次提交的差异
git diff --cached
  • 查看工作目录与最后一次提交的差异
git diff HEAD

5.5 标签管理

  • 创建标签
git tag [tag-name]
  • 查看标签
git tag
  • 推送标签到远程仓库
git push [remote-name] [tag-name]
  • 删除标签
git tag -d [tag-name]
  • 删除远程标签
git push [remote-name] --delete [tag-name]

 5.6 其他命令

  • 查看配置信息

git config --list
  • 配置全局邮箱

git config --global user.email "youremail@example.com"
  • 配置全局用户名

git config --global user.name "Your Name"

6.最后

感谢大家,请大家多多支持!

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

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

相关文章

【Kubernetes】常见面试题汇总(五十五)

目录 121. POD 创建失败&#xff1f; 122. POD 的 ready 状态未进入&#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#xff09;” 。 题目 69-113 属于【Kube…

Java项目实战II基于Java+Spring Boot+MySQL的宠物咖啡馆平台的设计与实现(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 在快节奏的城市生活中&#xff0c;宠物咖啡馆作为一种结合了休闲与宠物陪伴的新型业态&#xff0c;正…

重学SpringBoot3-集成Redis(三)

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Redis&#xff08;三&#xff09; 1. 引入 Redis 依赖2. 配置 RedisCacheManager 及自定义过期策略2.1 示例代码&#xff1a;自定义过期策略 3. 配置…

I/O多路转接

目录 一、select 1.1、select概念 1.2、select 函数原型 1.3、理解 select 执行过程 1.4、select就绪条件 1.4.1、读就绪 1.4.2、写就绪 1.4.3、异常就绪&#xff08;了解&#xff09; 1.5、select 基本工作流程 1.6、select服务器 1.6.1、Sock.hpp 1.6.2、selectS…

【复习】html最重要的表单和上传标签

文章目录 imgforminput img <img src"https://tse1-mm.cn.bing.net/th/id/OIP-C._XVJ53-pN6sDMXp8W19F4AAAAA?rs1&pidImgDetMain"alt"二次元"height"350px"width"200px"/>常用 没啥说的&#xff0c;一般操作css多一些 for…

CSP-J/S复赛算法 动态规划初步

文章目录 前言动态规划动态规划常见形式动态规划求最值的几个例子1. **背包问题**2. **最短路径问题**3. **最小硬币找零问题**4. **最长递增子序列** 总结 最优子结构举个简单的例子其他例子条件 DP的核心就是穷举具体解释 递归的算法时间复杂度dp数组的迭代解法通俗易懂的解释…

LabVIEW提高开发效率技巧----使用动态事件

在LabVIEW开发过程中&#xff0c;用户交互行为可能是多样且不可预知的。为应对这些变化&#xff0c;使用动态事件是一种有效的策略。本文将从多个角度详细介绍动态事件的概念及其在LabVIEW开发中的应用技巧&#xff0c;并结合实际案例&#xff0c;说明如何通过动态事件提高程序…

招联2025校招内推倒计时

【投递方式】 直接扫下方二维码&#xff0c;或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus&#xff0c;使用内推码 igcefb 投递&#xff09; 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策…

8648 图的深度遍历

### 思路 1. **图的邻接表存储结构**&#xff1a;使用邻接表存储图的顶点和边信息。 2. **基本操作函数**&#xff1a;包括创建图、查找顶点、获取顶点值、获取第一个邻接顶点、获取下一个邻接顶点等。 3. **深度优先遍历&#xff08;DFS&#xff09;**&#xff1a;从某个顶点出…

车载项目:HIL测试、功能安全测试、CAN一致性测试、UDS测试、ECU测试、OTA测试、TBOX测试、导航测试、车控测试

FOTA模块中OTA的知识点&#xff1a;1.测试过程中发现哪几类问题&#xff1f; 可能就是一个单键的ecu&#xff0c;比如升了一个门的ecu&#xff0c;他的升了之后就关不上&#xff0c;还有就是升级组合ecu的时候&#xff0c;c屏上不显示进度条。 2.在做ota测试的过程中&#xff…

今日指数项目个股描述功能实现

个股描述功能实现 1 个股描述功能实现说明 1&#xff09;原型示意 2&#xff09;接口说明 功能描述&#xff1a;个股主营业务查询接口 服务路径&#xff1a;/api/quot/stock/describe 服务方法&#xff1a;GET 请求参数&#xff1a;code #股票编码 响应参数&#xff1a; {…

java计算机毕设课设—坦克大战游戏

这是什么系统&#xff1f; 坦克大战游戏是一款以坦克为主题的射击游戏&#xff0c;旨在为玩家提供一个刺激、有趣的游戏体验。该游戏不仅拥有丰富的功能&#xff0c;还注重玩家的互动体验。此系统是使用Java语言实现坦克大战游戏程序&#xff0c;玩家通过连接访问进入游戏&…

C语言指针plus版练习

上期我们讲了进阶的指针&#xff0c;本期内容我们来强化一下上期学的内容 一、字符串左旋 实现一个函数&#xff0c;可以左旋字符串中的k个字符。 1.1 分析题目 假设字符串为abcde&#xff0c;左旋一个以后就变成bcdea&#xff0c;就是把第一个字符移到一个新的变量里面&#…

一、走进新语言

走进新语言 介绍环境配置JDK配置Kotlin配置 开发工具代码基本结构程序注释 介绍 Kotlin是一种现代但已经成熟的编程语言&#xff0c;旨在让开发人员更快乐。它简洁、安全、可与Java和其他语言互操作&#xff0c;并提供了许多在多个平台之间重用代码的方法。它由JetBrains公司于…

8647 实现图的存储结构

### 思路 1. 读取输入的顶点个数n和边的条数m。 2. 初始化一个n*n的邻接矩阵&#xff0c;所有元素初始为0。 3. 读取每条边的信息&#xff0c;更新邻接矩阵对应位置为1。 4. 输出邻接矩阵。 ### 伪代码 1. 读取n和m。 2. 初始化n*n的邻接矩阵matrix&#xff0c;所有元素为0。 …

DatePicker 日期控件

效果&#xff1a; 要求&#xff1a;初始显示系统当前时间&#xff0c;点击日期控件后修改文本控件时间。 目录结构&#xff1a; activity_main.xml(布局文件)代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:and…

[C++]使用纯opencv部署yolov11-pose姿态估计onnx模型

【算法介绍】 使用纯OpenCV部署YOLOv11-Pose姿态估计ONNX模型是一项具有挑战性的任务&#xff0c;因为YOLOv11通常是用PyTorch等深度学习框架实现的&#xff0c;而OpenCV本身并不直接支持加载和运行PyTorch模型。然而&#xff0c;可以通过一些间接的方法来实现这一目标&#x…

Apollo9.0 Planning2.0决策规划算法代码详细解析 (5): OnLanePlanning::Init()

&#x1f31f; 面向自动驾驶规划算法工程师的专属指南 &#x1f31f; 欢迎来到《Apollo9.0 Planning2.0决策规划算法代码详细解析》专栏&#xff01;本专栏专为自动驾驶规划算法工程师量身打造&#xff0c;旨在通过深入剖析Apollo9.0开源自动驾驶软件栈中的Planning2.0模块&am…

[Python] 编程入门:理解变量类型

文章目录 [toc] 整数常见操作 浮点数字符串字符串中混用引号问题字符串长度计算字符串拼接 布尔类型动态类型特性类型转换结语 收录专栏&#xff1a;[Python] 在编程中&#xff0c;变量是用于存储数据的容器&#xff0c;而不同的变量类型则用来存储不同种类的数据。Python 与 C…

通信工程学习:什么是RARP反向地址解析协议

RARP&#xff1a;反向地址解析协议 RARP&#xff08;Reverse Address Resolution Protocol&#xff0c;反向地址解析协议&#xff09;是一种网络协议&#xff0c;其主要作用是在设备只知道物理地址&#xff08;如MAC地址&#xff09;时&#xff0c;允许其从网关服务器的地址解析…