我正在尝试使用Gitolite来获得Node应用程序的一个相当简单的部署过程。 我有Gitolite的设置和在我的服务器上工作,我能够把它推到罚款。
Gitolite运行在名为git
的用户下,我已经设置了一个我希望用来运行Node应用程序的node
用户。
我的计划是将Node应用程序推送到Gitolite,然后使用post-receive钩子脚本将应用程序文件移动到应用程序所在的目录,在这种情况下, /var/local/node-apps/my-node-app/
。 我创build了像这样的Node应用程序文件夹:
sudo mkdir -p /var/local/node-apps/my-node-app sudo chown node /var/local/node-apps/my-node-app
问题是我是Unix的noob,我没有得到我的头文件/文件夹权限和wotnot。
/var/local/node-apps
(也是/var/local/node-apps/my-node-app
)是由node
用户拥有的,所以当git
用户试图检出这个位置时,我得到一堆权限否认错误。 我在post-receive中使用的命令是:
GIT_WORK_TREE=/var/local/node-apps/my-node-app git checkout -f
我得到这样的错误:
remote: error: git checkout-index: unable to create file XXXX (Permission denied) remote: fatal: cannot create directory at 'XXXX': Permission denied
解决这个问题的最好方法是什么? 我是否需要授予git
用户无密码sudo权限作为node
用户? 或者可以通过更改组和文件夹权限以某种方式修复? 或者完全不同的方法? 我迷路了!
谢谢!
使用sudo肯定会起作用,在“ post-receive hook permission denied”无法创建文件“error ”的例子中,将git命令封装在脚本中。
更改后收到:
sudo sh /usr/local/sbin/prgetsimpleappscom
用visudo改变了sudoers
git ALL = (root) NOPASSWD: /bin/sh /usr/local/sbin/prgetsimpleappscom
另一种方法是作为node
用户定期抓取的cron作业,(如果有新的提交)拉入目标库。