我们在开发项目的时候,push到git服务器后,我们可能还需要同步更新到线上服务器。
但是这一步骤往往比较麻烦,算是重复工作的一部分了,这时候我们就可以利用 钩子 来实现,自动同步项目代码
【事先准备】
1、git仓库,可以是 github ,gitee,也可以是自建的 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 实现自动部署代码到服务器上,解放生产力。