【发布时间】:2015-11-04 16:25:07
【问题描述】:
假设我在服务器 /hooks 文件夹中有两个脚本:
第一个启动日志记录并写入有关推送的基本信息:(接收后)
#!/bin/sh
read oldrev newrev refname
LOGFILE=post-receive.log
echo " push - Old SHA: $oldrev -> $newrev >> $LOGFILE
sh ./post-receive-logic >> $LOGFILE
第二个做实际部署:(post-receive-logic)
#!/bin/sh
cd ~/proj
pm2 stop ~/proj/main.js
git --git-dir ~/proj/.git --work-tree ~/proj pull
npm install
pm2 restart ~/proj/main.js
echo "finished"
当我推送一个提交时,第二个脚本永远不会被调用:工作树没有变化,没有服务器被杀死和重新启动,没有特定于第二个脚本的输出。
如果我手动拨打./post-receive-logic,一切正常,服务器停止,文件被拉取,服务器再次启动。
我尝试在没有sh 的情况下调用它,像这样:
./post-receive-logic >> $LOGFILE
但没有运气。
我做错了什么?
【问题讨论】:
-
两个脚本的权限一样吗?
-
您是否也尝试使用脚本的完整路径?
-
@HBHB 哦,我没想到,sctipts是从存储库根目录调用的,我应该写
./hooks/post-receive-logic >> $LOGFILE。 -
完全正确。您也可以使用完整路径。