git码云配置web hook钩子实现自动部署,git权限等问题,LAMP

这几天用git的时候就看到git有一个非常方便的功能可以实现自动部署到服务器。然后我就看啊看啊看,搜啊搜啊搜,知道了这玩意儿叫hook脚本,当我们在本机push到git平台时,git平台监听到了push命令,去触发服务器上的hook脚本,实现服务器代码更新,不用每次在上服务器拉一下代码。

我在弄这个的时候遇到了很多问题,然而网上一搜,TMD就那几篇文章转过去转过来,根本不能解决我的问题!现在我就慢慢讲给大家。

基本是这个意思吧,说不出专业的词汇,哈哈哈。

我们还是来讲一讲真正的实现流程吧。

1.把你的项目放到git平台。这个不需要教了吧?需要教就自己去百度,哈哈。毕竟我这篇文章是教你弄web hook。

2.在服务器查看apache2(我用的apache服务)执行用户,执行代码:ps -ef | grep apache2   #我的服务名是apache2,这里根据自己真实的写,比如有的是httpd。


如上图,我apache的运行用户是www-data。

所以当你使用php(我用的PHP,灵活理解)执行shell脚本的时候会使用www-data用户去执行shell。我遇到的问题就在这里,出现了权限不正确。所以我们必须统一这个用户去执行所有的操作。

在服务器也要用这个用户配置好git公钥,如:

sudo -u www-data ssh-keygen -t rsa -C "xxxxx@xxxxx.com"

配置好公钥后,你的git才拥有在这个用户下执行pull 的权限。

3.使用apache执行用户克隆git平台上的代码,如:sudo -u www-data git clone git@xxxxxxx  

当然可能会出现权限问题,说www-data用户 没有读写权限,你就需要把目录读写权限给www-data用户,这里也就不做讲解了。

当克隆完成后我们开始第四步:

4.创建一个接口,地址什么的自己配置就好,接口写一段儿执行shell的代码

我这里是:

<pre name="code" class="html"><?php 
	shell_exec("cd /your/git/dir ; sudo -u www-data git pull 2<&1");



就这么简单一句,我们在上git平台上配置好这个接口,我们就可以使用hook了。

当你在本地push的时候,服务器就会调用这个接口执行sudo -u www-data git pull 实现自动部署。

在平台可以设置个密码,password字段,他是一个json 当你接口实际使用的时候需要经过判断是不是你的git平台在调用你的接口,如果不是你可屏蔽掉。

我的讲解就到这里了。


不信你试试?

我是因为这个权限问题搞了很久,如果还有问题我就没办法了,你就谷歌百度研究吧。

哈哈,顺便弄好了发一篇博客给我们看看,以免下次遇到问题有TMD是那几篇!!!

好了,就到这里吧。

谢谢大家来看!


阅读更多
个人分类: 个人经验
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

git码云配置web hook钩子实现自动部署,git权限等问题,LAMP

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭