宝塔 webhook 没有起作用(无效)
gitlab 有一个 webhooks 的功能,可以在指定分支 push 事件触发时,自动调用 URL 部分,这个可以 URL 可以是一个 PHP 脚本,里面包含了 git pull
等 bash 执行的语句,这样,每次提交代码到 gitlab,测试站(或者项目相关之类的站点)会自动拉去最新的代码,方便测试。
而宝塔面板里有一个 webhook 的插件,可以生成一个 URL,每次调用这个 URL,就可以执行一次 bash 脚本。其中的脚本可以自定义。这边的自动 pull 脚本如下:
if test $1 = 'xxx'
then
echo '代码更新开始:' $(date '+%Y-%m-%d %H:%M:%S')
cd /path/to/xxx
git pull origin master
echo '代码更新完成:' $(date '+%Y-%m-%d %H:%M:%S')
fi
以上脚本需要修改三个部分:$1
是外部带入的参数,对应 URL 中的 param。这个参数值这边考虑为项目名称和文件名称,path/to/xxx
为需要切换到的项目目录。最后是 pull 命令的执行,一般第一次需要指定 origin 源,这边对应的分支可以是 master,也可以是测试分支。
但在把宝塔 webhook 生成的 URL 添加到 gitlab 中的 webhook 后,测试调用发现,宝塔的 webhook 调用次数显示已调用,但日志里包括项目下 git log
都显示没有执行 pull。
代码更新开始: 2022-06-22 16:52:02
代码更新完成: 2022-06-22 16:52:02
看到其他更新成功的 webhook 日志,中间是有 pull 的内容的,即使当前分支为最新版本,也会显示一个 Already up-to-date.
。
一开始以为是 webhook 执行脚本的用户权限不够,但通过在 bash 中增加 who 输出发现,脚本执行者就是 root。
之后想到可以在 bash 中嵌套执行 bash,写一个 sh 脚本,然后设置这个文件的用户及用户组等等,但这依然没有效果。
然后想到可以获取 git pull
执行结果,再输出来看是否报错或者什么内容。网上找到两种方式获取命令执行结果:
- 使用反引号
``,例如:`a=`echo "hello world"
- 使用
$()
,例如:a=$(echo "hello world")
但这样依然没有任何的结果输出。
最后同事说找个一个教程,重启一下宝塔,重启之后测试好了。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。