宝塔 webhook 的使用

相关知识 -- git挂钩

原文链接 -- 宝塔 webhook 的使用

在这里 非常感谢 宝塔团队 集成 git  和 webhook 

最近还添加了  gitlab 虽然我现在用的是 gogs

上周公司从svn 转用git管理 同时需要解决 传统的FTP上传文件多人合作代码整合问题

这个问题之前在网络上也找到一些方式 只是一直没有使用,但是用了宝塔面板后 这些配置变得非常简单

在这里整理一下最近 通过宝塔面板 整合 git + webhook 代码同步问题

当前环境:

1、公司项目代码使用gogs (gogs.io) 管理

2、公司测试服务器  centos 7   (宝塔 5.0)

3、公司阿里云服务器 centos 7 (宝塔 5.0)

需求:

1、公司项目开发环境  统一在测试服务器 测试 主要是 web 项目

2、公司git 提交的代码 测试服务器自动更新

3、通过 gogs 发布的版本 自动更新到 阿里云服务器

原理:

通过 git 的 webhook (git web 钩子) 触发 push 事件 ,用户提交代码后( git push )  测试服务器 直接拉取当前git最新代码 (git pull)

当用户通过 gogs 发布版本 (git archive)  触发 webhook   阿里云服务器自动拉取最新的代码(git pull)

实施:

1、centos 服务器 安装 git

yum install git

2、宝塔面板 安装  宝塔  webhook 1.0

3、通过webhook 添加 shell 命令

001441y8l8tt2a8ga2t8un.jpg

添加 shell 命令 (最好是随便添加一些字符后 在编辑的时候重新添加shell命令进去,在上图编辑框输入的命令会被过滤)

#!/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/web/$1"
#git 网址
gitHttp="http://git.xxxxx.com/web/$1.git"

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

编辑完成后  查看当前调用的网址:(希望 能直接生成调用网址  后面参数 param  为 shell 命令的变量 $1)

例如:http://bt.xxxxx.com/hook?access_ ... HJIdI6Dvl¶m=www

001442n8n8bylike8pbbzb.jpg

4、点击生成的网址测试 shell 命令 是否成功  注意当前shell 命令把目录作为了变量 param 传输   考虑多项目的情况

测试 日志查看

001807om9kumbv3iviymyd.jpg 

5、配置 git web 钩子   如 gogs 的配置 如下

001441rmgjfkmdj9fckz8z.jpg

6、点击git 提交 和生成版本 执行情况  还有 宝塔 webhook 日志查看对应

002007or4y4daxc8v8rrxv.jpg

完成

原文链接 -- 宝塔 webhook 的使用