Git Web Hooks 的部署 4年前

代码工具
910
Git Web Hooks 的部署

Git Web Hooks 的部署

  • [Web Hooks 的介绍](#Web Hooks 的介绍)
  • [Web Hooks 在Linux中的坑](#Web Hooks 在Linux中的坑)
  • [Web Hooks 在Windows Server中的坑](###Web Hooks 在Windows Server中的坑)

Web Hooks 的介绍

Git钩子功能(callback),是帮助用户push了代码后,自动回调一个您设定的http地址。 这是一个通用的解决方案,用户可以自己根据不同的需求,来编写自己的脚本程序(比如发邮件,自动部署等)

Web Hooks 在Linux中的坑

流程大概是这样的:

  1. 编写含有git pull的Shell脚本;
  2. 创建http入口文件(我用PHP写的)
  3. 通过PHP调用Shell脚本进行代码更新
  4. 在git仓库那里设置git web hooks

我linux上是nginx,以nginx为例子

坑:

  1. git pull需要帐号验证 解决办法:需要添加ssh Key;(添加ssh Key教程自行查找)

  2. PHP 调用 git pull 失败,错误不显出 解决办法 : 使用 exec('git pull 2>&1', $outpur); print_r($output);打印错误信息。

  3. 错误提示:Permission denied(明明添加了ssh Key,还提示这个) 原因:因为我的PHP是nginx进程去调用git pull,nginx进程对应的用户是www www 30016 0.0 1.4 21236 15100 ? S Aug10 0:00 nginx: worker process 好吧,切换到www创建ssh Key su www 什么? This account is currently not available. 哦,不可用。去改咯。 vim /etc/passwd 找到www把/sbin/nologin改成/bin/bash 切换到www用户添加ssh Key ok了。

  4. 其实方法有很多,以上只是其中一种,例如:可以直接使用已有ssh Key的用户去启动nginx或者可以直接把已有的.ssh文件复制到www用户目录下(前提是知道用户目录在哪).

  5. 有时候git pull会出错,完整的shell贴出来参考一下

    #!/bin/bash

    PATH='/home/www/xxx' USER='www' USERGROUP='www'

    echo "Start." cd $PATH git reset --hard origin/master git clean -f git pull git checkout master chown -R $USER:$USERGROUP $PATH echo "Emd."


Web Hooks 在Windows Server中的坑

流程和Linux上差不多,问题还是在git pull上面; 我Windows Server装的是Apache,以apache为例;

坑:

启动apache的用户是System。什么鬼,System的用户目录在哪,然而我不知道,也不会切换成System用户,不知道能不能切换,来个这样的提示。 Could not create directory '/home/SYSTEM/.ssh'. Host key verification failed. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. #####然后 我去服务那里找出apache对应的服务(如果用集成环境的可能名字不一样,wamp下的叫wampapache),选中->属性->登录->帐户改为已添加ssh Key的用户,保存,重启服务。成功执行git pull。

后面的和linux上的一样了

圣文森学园
从进入厨房的瞬间开始,你们就肩负着烹饪美食的责任。
6
发布数
0
关注者
4076
累计阅读

热门教程文档

Dart
35小节
Vue
25小节
爬虫
6小节
Swift
54小节
PHP
52小节
广告