V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
wtz
V2EX  ›  git

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

  •  
  •   wtz · 2015-06-26 12:17:41 +08:00 · 7811 次点击
    这是一个创建于 3423 天前的主题,其中的信息可能已经有所发展或是发生改变。

    情况如下:
    我在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命令。

    16 条回复    2015-08-25 14:30:58 +08:00
    guoer
        1
    guoer  
       2015-06-26 12:35:18 +08:00
    指定git bin路径
    guoer
        2
    guoer  
       2015-06-26 12:35:35 +08:00
    which git
    wtz
        3
    wtz  
    OP
       2015-06-26 12:38:37 +08:00
    which git :

    /usr/bin/git

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

    你要@我 我才能收到通知呀 亲
    wtz
        6
    wtz  
    OP
       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
        7
    wtz  
    OP
       2015-06-26 13:18:38 +08:00
    @guoer
    在吗
    lizheming
        8
    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
        9
    guoer  
       2015-06-26 13:44:57 +08:00
    @wtz 是的
    你试一下不就得了
    wtz
        10
    wtz  
    OP
       2015-06-26 13:48:14 +08:00
    @guoer
    不成功
    guoer
        11
    guoer  
       2015-06-26 13:53:45 +08:00
    @wtz 提示什么?
    wtz
        12
    wtz  
    OP
       2015-06-26 14:10:15 +08:00
    @wtz
    什么都没有提示
    wtz
        13
    wtz  
    OP
       2015-06-26 14:17:25 +08:00   ❤️ 1
    @lizheming

    非常感激,已经成功了。
    odirus
        14
    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
        15
    tonitech  
       2015-08-10 21:36:41 +08:00   ❤️ 1
    今天我也遇到了同样的问题,我用exec("whoami");之后发现是www这个用户,但是我都已经把www放到/etc/sudoers里面了,真是百思不得其解,最后只能把那个用来执行git branch -a的代码目录直接chown成www。
    x4storm
        16
    x4storm  
       2015-08-25 14:30:58 +08:00
    @tonitech 你好。我想问一下 www 用户的 ssh key 怎么解决的?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2781 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:00 · PVG 10:00 · LAX 18:00 · JFK 21:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.