php - 在 IIS 上通过 PHP 设置 git 部署时遇到问题

标签 php git deployment ssh iis-7.5

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

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

  • 该站点已设置并正常运行。它位于 c:\inetpub\wwwroot\sitename
  • 此文件夹是使用我的远程桌面用户(管理员)克隆的。克隆是通过 Git Bash 完成的,我知道 SSH key 位于管理员的 home/.ssh 目录中。
  • 此文件夹可由 IIS_IUSRS
  • 写入
  • 我还将 key 复制到 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 key 的权限。使用 Windows CMD(不是 Git Bash)运行这两个脚本虽然有效

    所以我的烦恼是:
  • 我不确定是否是未加载 SSH key ,因为我在浏览器上看不到错误
  • 我不确定我是否从正确的方向开始。

  • 我不敢进一步摆弄,因为这是为了生产。

    谢谢!

    最佳答案

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

    你可以试试:

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

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

    关于php - 在 IIS 上通过 PHP 设置 git 部署时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22165150/

    相关文章:

    php - 在 Laravel 5 中获取数据库条目时的编码问题

    Git rebase (Merge Squash) 我的功能分支到另一个分支

    使用 libgit2 创建并提交标签

    postgresql - 将 Web2py 部署到 Heroku(Psycopg2 错误)

    node.js - 将RoR项目推送到服务器后,出现Node.js版本错误【Buildpack问题】

    php - jQuery 通过 Ajax 调用 PHP 文件危险吗?

    php - 按表头对 MySql 行进行排序

    linux - 使用 AZURE 从 Windows 远程访问 Linux 虚拟机时出现连接错误

    javascript - 根据选择选项使用 jquery 更新或替换 URL 参数

    git - 将 merge 分支放回到 Git 中