关闭

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

标签: LAMPgitapachewebhook服务器
8096人阅读 评论(3) 收藏 举报
分类:

这几天用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是那几篇!!!

好了,就到这里吧。

谢谢大家来看!


2
0
查看评论

使用Generic Webhook Trigger插件实现Jenkins+WebHooks(码云)持续集成

WebHook、钩子,Generric Webhook Trigger前后端分离的时候,的API接口,可能需要每次有一个接口的变动都需要重新部署到dev环境上,例如:最常见的Git工作流的方式,develop和master分开的,中提交的代码首先合并到develop上,每次有代码合并的时候,也需要手...
  • u010870518
  • u010870518
  • 2017-06-03 16:45
  • 15800

Gitee码云通过WebHooks实现自动同步代码部署

码云(Gitee)的WebHooks功能,可以在我们每次提交代码后,向我们设定的地址post一个更新的json信息,这样我们就可以根据该信息,来自动拉去我们的代码,实现自动同步功能.第一步 配置WebHooks在[码云](https://gitee.com/)上,自己的项目中,选择"管理&...
  • LMH820822
  • LMH820822
  • 2017-10-26 17:24
  • 1865

webhook 挂钩自动部署

假设我们现在有一个需求,就是将项目打包上传到gitlab或者github后,程序能自动部署,不用手动地去服务器中进行项目更新并运行,如何做到?这里我们可以使用gitlab与github的挂钩,挂钩的原理就是,每当我们提交请求到gitlab与github服务器时,这时他俩会根据我们配置的访问地扯进行访...
  • dounine
  • dounine
  • 2017-08-29 09:17
  • 6717

git webhook 代码自动部署

echo exec("cd /data/airenwen/ && /usr/local/git/bin/git pull");
  • kongdeqian1988
  • kongdeqian1988
  • 2016-09-08 15:50
  • 1013

利用WebHook实现Github或Coding代码的自动部署

这个问题也是出于自己遇到的不便,平时都是把代码托管到GitHub或者Coding,一方面是为了方便代码管理,再就是能更好的存储代码。但是最近会遇到这样的一个问题本地代码提交Git之后,还要去服务器执行以下git pull,所以会感到很繁琐。于是就想利用GitHub或者Coding的WebHook来实...
  • zmzwll1314
  • zmzwll1314
  • 2017-08-29 15:06
  • 1079

钩子及其使用

钩子函数的用法和作用? http://topic.csdn.net/t/20020625/10/827891.html WINDOW的消息处理机制为了能在应用程序中监控系统的各种事件消息,提供了挂接各种反调函数(HOOK)的功能。这种挂钩函数(HOOK)类似扩充中断驱动程序,挂钩上可以挂...
  • zhouhao094
  • zhouhao094
  • 2015-07-18 11:10
  • 511

玩转git之webhook应用初探

在百度搜索了一下 git webhook 这个关键字,没有看到有相关的详细的应用教程。 所以决定把 自己这段时间以来的摸索 写成文字 分享给大家 。 最近碰到这样的一个需求,就是 本地提交代码 到 git仓库以后 需要 网站 远程自动同步代码 。 git 的 webhook...
  • hsany330
  • hsany330
  • 2015-11-17 15:38
  • 3680

【Webhooks】使用Git的Webhooks进行服务器自动部署代码

通过callback的方式,我们可以通过自己的方式和思路实现项目监控统计,以及**自动化部署项目**的目的. 在这次学习的过程中,顺便了解了ngrok,sinatrarb以及Ruby. 语言并不是隔阂,仅仅是解决问题的工具而已. :)
  • diandianxiyu
  • diandianxiyu
  • 2016-05-13 15:39
  • 18378

Jenkins+git+webhook自动触发部署和测试任务

需求: 目前上线前会将需要上线的代码push到release分支,然后由人工填写参数点击触发jenkins上的任务。希望这个过程能完成自动化,只要有人往release上推代码,就自动跑部署release分支并测试 解决办法及步骤: 1.在jenkins里需要自动触发的job里的...
  • qq_34618853
  • qq_34618853
  • 2017-04-13 16:37
  • 1738

git的webhook设置

以下是coding.net对webhook的解释: 本文实现的功能是通过webhook实现远程git仓库的自动更新。实现原理:webhook的主要设置是一个接收url和一个验证token。 每次在本地push操作之后,webhook都会发送一个post信息到设置的url。 所以我们可以在u...
  • alexander_phper
  • alexander_phper
  • 2016-03-10 09:36
  • 3452
    个人资料
    • 访问:29880次
    • 积分:392
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:3篇
    • 译文:0篇
    • 评论:9条
    最新评论