我们在开发项目的时候,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 实现自动部署代码到服务器上,解放生产力。