我们在开发项目的时候,push到git服务器后,我们可能还需要同步更新到线上服务器。

但是这一步骤往往比较麻烦,算是重复工作的一部分了,这时候我们就可以利用 钩子 来实现,自动同步项目代码

【事先准备】

1、git仓库,可以是 githubgitee,也可以是自建的 gitea, gogs

2、安装好 宝塔 的服务器

3、安装好 git 的服务器,未安装的可以先安装 yum install git

已安装的,可以通过git --version查看版本

各个 git 托管仓库的 webhooks 大同小异,以下以 码云gitee 为例,进行流程讲述。

【流程】

1、为当前服务器生成公钥

登录到服务器,输入 ssh-keygen -t ras 命令,一路回车即可。

2、添加公钥到码云项目

3、进入服务器,web目录,首次克隆仓库


cd /www/wwwroot

# 方法一: 使用ssh
git clone git@gitee.com:shayvmo/test-webhook.git

# 方法二: 使用https
git clone https://gitee.com/shayvmo/test-webhook.git

# 使用 https 方法,则开启记录第一次 git pull 输入的账号密码。如果使用https 方法,需要在服务器先 git pull 一次
git config --global user.name "用户名"
git config --global user.email "邮箱"
git config --global credential.helper store

# 查看记录的用户凭证
cat ~/.git-credentials

#显示
https://Username:Password@gitee.com

4、宝塔添加 webhook

需要执行的脚本

#!/bin/bash
echo ""
#输出当前时间
date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"
echo "Start"
#判断宝塔WebHook参数是否存在
if [ ! -n "$1" ];
then
echo "param参数错误"
echo "End"
exit
fi
#git项目路径
gitPath="/www/wwwroot/$1"
#git 网址
gitHttp="参照第3步的克隆地址"

echo "Web站点路径:$gitPath"

#判断项目路径是否存在
if [ -d "$gitPath" ]; then
cd $gitPath
#判断是否存在git目录
if [ ! -d ".git" ]; then
echo "在该目录下克隆 git"
git clone $gitHttp gittemp
mv gittemp/.git .
rm -rf gittemp
fi
#拉取最新的项目文件
git reset --hard origin/master
git pull
#设置目录权限
chown -R www:www $gitPath
echo "End"
exit
else
echo "该项目路径不存在"
echo "End"
exit
fi

5、把 webhook 地址添加到码云上

【结尾】

以上几步就可以利用git + webhook 实现自动部署代码到服务器上,解放生产力。