"Arguments to path.resolve must be strings" 从 Git 挂钩调用 'gitbook build' 时

"Arguments to path.resolve must be strings" when calling 'gitbook build' from a Git hook

我正在尝试 运行 gitbook build 在 post-receive Git 钩子上(Gitlab,Debian 7,虚拟私有)服务器。

基本上我想:

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)

搜索该错误消息似乎指向 G运行t,但我只是不知道这里发生了什么。我怀疑 invocation/permissions,但用户(在这两种情况下 whoami returns git 用户)和工作目录似乎都没有什么不同。

但无论如何 gitbook 在调用 "locally"(即从服务器的命令行)或从 Git 挂钩时表现不同。

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

一些实验证明是

export HOME=/home/git

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