gitlab webhook php exec 调用 shell 脚本。shell 脚本中调用 git pull 命令无法执行。

2015-06-26 12:17:41 +08:00
 wtz

情况如下:
我在ubuntu server 14.04 上面安装了gitlab,来托管项目代码。然后想通过gitlab的web hook 功能来做测试服务器代码自动化更新代码功能。现在遇到一个问题:就是我客户端在master分支上面push代码的时候,我测试服务器的代码目录并没有自动更新。我的shell脚本如下:

!/bin/bash
echo 'haha:::==' >> /tmp/wtz.log

cd /srv/www/bfar-ng

echo 'my name is gitlab'>> /tmp/wtz.log

git checkout master

git pull origin master >> /srv/www/deploy/info.log

git pull origin master

echo 'you are so cute!!!::'>> /tmp/wtz.log

查看wtz.log 后发现echo 'my name is gitlab'>> /tmp/wtz.log 和echo 'you are so cute!!!::'>> /tmp/wtz.log 都成功写入到日志文件中。但测试服务器项目原代码就是没有自动更新。除非手动git pull origin master 或者 在终端里面直接执行 上面的shll。它才会更新。
ps:项目目录我都设置777权限了。

求教为啥无法执行git命令。

7684 次点击
所在节点    git
16 条回复
guoer
2015-06-26 12:35:18 +08:00
指定git bin路径
guoer
2015-06-26 12:35:35 +08:00
which git
wtz
2015-06-26 12:38:37 +08:00
which git :

/usr/bin/git

要改成 /usr/bin/git git pull origin master 这样的吗??
guoer
2015-06-26 12:47:03 +08:00
/usr/bin/git pull origin master
guoer
2015-06-26 12:47:49 +08:00
或者这样
git=/usr/bin/git
$git pull origin master

你要@我 我才能收到通知呀 亲
wtz
2015-06-26 13:03:14 +08:00
@guoer

这样吗?
!/bin/bash


cd /srv/www/bfar-ng



/usr/bin/git checkout master

/usr/bin/git pull origin master
wtz
2015-06-26 13:18:38 +08:00
@guoer
在吗
lizheming
2015-06-26 13:20:06 +08:00
之前正好搞过这个,主要还是权限的问题,最好用 sudo git pull origin master, 然后参照这个 http://stackoverflow.com/questions/3173201/sudo-in-php-exec 将 PHP 的执行用户加到 sudo 免密输入的列表中...
guoer
2015-06-26 13:44:57 +08:00
@wtz 是的
你试一下不就得了
wtz
2015-06-26 13:48:14 +08:00
@guoer
不成功
guoer
2015-06-26 13:53:45 +08:00
@wtz 提示什么?
wtz
2015-06-26 14:10:15 +08:00
@wtz
什么都没有提示
wtz
2015-06-26 14:17:25 +08:00
@lizheming

非常感激,已经成功了。
odirus
2015-07-08 10:28:06 +08:00
@lizheming
@wtz
请问两位,我现在也是遇到了这个问题,虽然能通过把git用户加入到sudo免密码中解决,但还是有些疑问,因为我在本机能够进行更新,在公司内网服务器也能更新,拿到外网就不能更新了(我们的线上线下环境是统一打包的,所以大体一致的,各文件夹的权限也一致)。主要是 git status 等查询命令能执行, git fetch 等更新命令就是不执行,php中的shell_exec("cd $workpath && git fetch")等更新命令就是执行不了,返回NULL。
stackoverflow 上面有位遇到同样问题的童鞋,不过我的reputation太低了,没法联系他。。。
tonitech
2015-08-10 21:36:41 +08:00
今天我也遇到了同样的问题,我用exec("whoami");之后发现是www这个用户,但是我都已经把www放到/etc/sudoers里面了,真是百思不得其解,最后只能把那个用来执行git branch -a的代码目录直接chown成www。
x4storm
2015-08-25 14:30:58 +08:00
@tonitech 你好。我想问一下 www 用户的 ssh key 怎么解决的?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/201342

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX