如何使用shell_exec()触发gulp任务?

时间:2017-04-21 20:22:25

标签: php node.js bash deployment gulp

当我推送到GitHub上的存储库时,我试图建立一个自动在远程服务器上进行拉取和编译的系统。我已经找到了一些非常有用的功能,但我仍然坚持最后一步:执行我的任务,gulp --dist

我使用this excellent PHP script触发拉动,效果很好。我已经分叉了该存储库,以便尝试添加一个额外的选项AFTER_PULL,该选项在完成后执行shell命令。 Here's my modification(也在下面)。在config.php中,我设置了以下内容:

define('AFTER_PULL', 'node ./node_modules/gulp/bin/gulp.js --dist');

这似乎永远不会触发,似乎也没有触发任何错误。

我认为它可能是权限,但用户(www-data)有权在所有必要的目录中工作。我找到了this article detailing how to allow www-data to run without needing a password,但在完成这些步骤后,它仍无效。

我确定我必须做一些明显错误的事情,而我却无法看到它。如果我在具有sudo -Hu www-data的终端中运行该命令,则该命令有效。

...

if (!empty(AFTER_PULL)) {
    try{
        shell_exec(AFTER_PULL);
    }catch (Exception $e) {
        fputs($file, $e . "\n");
    }
}

...

1 个答案:

答案 0 :(得分:2)

使用节点二进制文件的完整路径:

define('AFTER_PULL', ' /usr/bin/node ./node_modules/gulp/bin/gulp.js --dist');