当前位置:论坛首页 > Linux面板 > 讨论

宝塔 webhook 的使用

发表在 Linux面板2017-8-9 00:20 [复制链接] 17 33266

在这里 非常感谢 宝塔团队 集成 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
  1. yum install git
复制代码
2、宝塔面板 安装  宝塔  webhook 1.0

3、通过webhook 添加 shell 命令

webhook.jpg

添加 shell 命令 (最好是随便添加一些字符后 在编辑的时候重新添加shell命令进去,在上图编辑框输入的命令会被过滤)
  1. #!/bin/bash
  2. echo ""
  3. #输出当前时间
  4. date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"
  5. echo "Start"
  6. #判断宝塔WebHook参数是否存在
  7. if [ ! -n "$1" ];
  8. then
  9.           echo "param参数错误"
  10.           echo "End"
  11.           exit
  12. fi
  13. #git项目路径
  14. gitPath="/www/wwwroot/web/$1"
  15. #git 网址
  16. gitHttp="http://git.xxxxx.com/web/$1.git"

  17. echo "Web站点路径:$gitPath"

  18. #判断项目路径是否存在
  19. if [ -d "$gitPath" ]; then
  20.         cd $gitPath
  21.         #判断是否存在git目录
  22.         if [ ! -d ".git" ]; then
  23.                 echo "在该目录下克隆 git"
  24.                 git clone $gitHttp gittemp
  25.                 mv gittemp/.git .
  26.                 rm -rf gittemp
  27.         fi
  28.         #拉取最新的项目文件
  29.         git reset --hard origin/master
  30.         git pull
  31.         #设置目录权限
  32.         chown -R www:www $gitPath
  33.         echo "End"
  34.         exit
  35. else
  36.         echo "该项目路径不存在"
  37.         echo "End"
  38.         exit
  39. fi
复制代码



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

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

webhook-url.jpg




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

webhook-results.jpg

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


webhook-git.jpg


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




完成














使用道具 举报 只看该作者 回复
发表于 2017-8-9 16:57:41 | 显示全部楼层
你应该受到万人敬仰
使用道具 举报 回复 支持 1 反对 0
发表于 2017-8-9 16:57:29 | 显示全部楼层
感谢你的知识奉献
使用道具 举报 回复 支持 1 反对 0
发表于 2017-8-9 09:39:11 | 显示全部楼层
感谢分享,
我们会尽快修正shell提交被过滤的问题。
使用道具 举报 回复 支持 反对
发表于 2017-8-9 10:38:19 | 显示全部楼层
马                        
使用道具 举报 回复 支持 反对
发表于 2017-8-9 17:10:12 | 显示全部楼层
mark.................
使用道具 举报 回复
发表于 2017-8-19 21:30:34 | 显示全部楼层
感谢你的知识奉献
使用道具 举报 回复 支持 反对
发表于 2017-9-4 16:40:06 | 显示全部楼层
本帖最后由 痞子哥 于 2019-5-7 14:50 编辑

感谢分享!!!!!!
使用道具 举报 回复
发表于 2017-10-14 21:38:54 | 显示全部楼层
本帖最后由 1500307061inbu 于 2017-10-14 22:11 编辑

为什么总是拉取上一个版本?最新的不拉取呢?
使用道具 举报 回复 支持 反对
发表于 2017-10-31 01:17:53 | 显示全部楼层
jovkchan 发表于 2017-10-14 21:38
为什么总是拉取上一个版本?最新的不拉取呢?

shell脚本修改好后重启宝塔面板服务 /etc/init.d/bt restart
使用道具 举报 回复 支持 反对
发表于 2017-11-4 19:39:10 | 显示全部楼层
我有幾個問題請教樓主:

一:私有倉庫,是要先在服務器上生成sshkey的是吧;有木有權限問題。
二:自定義參數param  這個衹能是一個?假設我的目錄是 xxx.com 但是我的倉庫名字是xxx情況怎麽辦呢?
使用道具 举报 回复 支持 反对
发表于 2018-1-16 16:04:34 | 显示全部楼层
私有项目如何解决需要输入git 账号密码的问题,请给出具体的sshkey设置教程
使用道具 举报 回复 支持 反对
发表于 2018-3-18 19:00:47 | 显示全部楼层
111.png

我的一直这样 Cloning info 'gittemp' ...
使用道具 举报 回复 支持 反对
发表于 2018-9-28 10:41:30 | 显示全部楼层
webhook 如果能返回 脚本的输出就更好了
现在返回的
  1. {"code":1}
复制代码
,j仅仅是一个执行状态
可以返回更多信息,例如
  1. {"code":1,"msg":"错误信息","output":"shell 输出"}
复制代码
使用道具 举报 回复 支持 反对
发表于 2018-11-8 13:53:06 | 显示全部楼层
还是不能用私有库,请问怎么解决呢?
使用道具 举报 回复 支持 反对
12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

立即付费处理

工作时间:09:00至24:00

快速回复 返回顶部 返回列表