0

我正在尝试gitbook build在我的(Gitlab、Debian 7、虚拟专用)服务器上的接收后 Git 挂钩中运行。

基本上我想:

  • 将裸存储库签出到临时目录
  • gitbook build在那个临时目录中运行
  • 通过与网络空间同步rsync

post-receive脚本运行如下:

git --work-tree=/home/git/temp-checkout /
--git-dir=/home/git/repositories/my/repo.git checkout -f

gitbook build /home/git/temp-checkout

rsync ...

从服务器的命令行运行这些命令效果很好。
从服务器的命令行运行脚本也很有效。
但是当从 Git 钩子调用脚本时,gitbook调用会产生以下错误:

remote: path.js:439
remote:       throw new TypeError('Arguments to path.resolve must be strings');
remote:             ^
remote: TypeError: Arguments to path.resolve must be strings
remote:     at Object.posix.resolve (path.js:439:13)
remote:     at Object.<anonymous> (/usr/lib/node_modules/gitbook-cli/lib/config.js:5:24)
remote:     at Module._compile (module.js:460:26)
remote:     at Object.Module._extensions..js (module.js:478:10)
remote:     at Module.load (module.js:355:32)
remote:     at Function.Module._load (module.js:310:12)
remote:     at Module.require (module.js:365:17)
remote:     at require (module.js:384:17)
remote:     at Object.<anonymous> (/usr/lib/node_modules/gitbook-cli/bin/gitbook.js:11:14)
remote:     at Module._compile (module.js:460:26)

搜索该错误消息似乎指向 Grunt,但我只是不知道这里发生了什么。我怀疑有关调用/权限的一些事情,但是用户(在两种情况下都whoami返回git用户)和工作目录似乎都没有区别。

但无论如何gitbook,当“本地”调用(即从服务器的命令行)或从 Git 钩子调用时,行为会有所不同。

4

1 回答 1

0

一些进一步的考虑使我找到了正确的方向:调用 Git 挂钩与在服务器的命令行上工作具有不同的登录上下文。因此, set > some-file在这两种情况下运行揭示了环境变量的显着差异。

一些实验证明它是

export HOME=/home/git

必须包含在脚本中。所以显然gitbook因为没有设置环境变量而窒息。

于 2015-06-16T07:11:00.933 回答