在开发过程中,我们经常遇到的问题就是提交代码到测试地址,然后进行线上测试。
要实现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.最后
感谢大家,请大家多多支持!