无法在IIS上通过PHP设置git部署

时间:2014-03-04 07:06:19

标签: php git deployment ssh iis-7.5

首先,这是我第一次设置webhooks,我不熟悉Windows服务器。我已经看过很多关于此的帖子,但我仍然无法解决问题 - 可能是由于我对Windows服务器和权限缺乏了解。

我有一个Windows 2008 R2,我希望能够在将更改推送到外部GIT存储库后通过PHP脚本自动提取。

  • 该网站已设置并正常运行。它位于c:\ inetpub \ wwwroot \ sitename
  • 使用我的远程桌面用户(管理员)克隆此文件夹。克隆是通过Git Bash完成的,我知道SSH密钥存在于admin的home / .ssh目录中。
  • 此文件夹可由IIS_IUSRS
  • 写入
  • 我已将密钥复制到C:\Program Files (x86)\Git\.ssh,如此处所述(Git can't find .ssh

我在该文件夹中有一个带有'pull'代码的PHP脚本:

exec('"C:\Program Files (x86)\Git\bin\git.exe" pull 2>&1', $output);
var_dump($output);
echo '--done--';

页面上挂着浏览器上的加载图标。没有输出。

但如果做'状态':

exec('"C:\Program Files (x86)\Git\bin\git.exe" status 2>&1', $output);
var_dump($output);
echo '--done--';

我得到了预期的输出。

我猜这可能是由于SSH密钥的权限。使用Windows CMD(而不是Git Bash)运行这两个脚本可以正常工作

所以我的麻烦是:

  1. 我不确定是否未加载SSH密钥导致我无法在浏览器上看到错误
  2. 我不确定我是否从正确的方向开始。
  3. 我不敢进一步提及,因为这是为了生产。

    谢谢!

1 个答案:

答案 0 :(得分:0)

您很可能已经为当前用户存储了git凭据,但是当Web服务器(IIS_IUSRS)执行git命令时,它没有凭据,因此要求输入用户名和密码。然后挂起脚本。

你可以尝试:

  • 将用户名和密码传递给进程编辑:这对我不起作用,因为git会创建多个未绑定到管道的子进程。
  • 将凭据放入_netrc文件并将其保存在IIS用户的主目录中(请参阅C:\ Windows \ ServiceProfiles ...)
  • 以IIS用户身份启动控制台,使用git命令并使用该用户的凭据帮助程序存储凭据。

请参阅此处了解如何存储Git凭据:https://confluence.atlassian.com/display/STASH/Permanently+authenticating+with+Git+repositories