Code Monkey home page Code Monkey logo

gitlab-webhook-php's Introduction

# GitLab Web Hook For PHP

开始使用

​ 服务器环境必须先安装git环境,Webhook脚本依赖PHP运行环境,同时需要有exec函数执行权限。使用前需要先开启禁用的PHP部分可执行函数,参考以下设置

$ which php
/usr/local/php/bin/php

$ sudo vi /usr/local/php/etc/php.ini

#在disable_functions前面添加#
;disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,popen
  1. 在实际项目目录克隆远程仓库

    Gitlab Webhook自动部署也需要在指定的git仓库中运行,也即是在实际项目目录中需要远程克隆git仓库,例如:

    $ git clone git@gitlabserver:developer/project.git
    $ cd project
    $ pwd
    /mnt/www/project
  2. 在项目目录克隆Gitlab Web Hook For PHP

    进入项目目录,克隆gitlab web hook for php。克隆完成后,需要将项目中带有{server} {project}字样的内容替换为自己的服务器IP与服务器目录

    $ git clone https://github.com/bravist/gitlab-webhook-php
    $ cd gitlab-webhook-php
    $ pwd 
    /mnt/www/project/gitlab-webhook-php
    $ ll
    total 20
    -rwxrwxrwx 1 www www  140 Sep 13 09:59 develop_deploy.sh
    -rwxrwxrwx 1 www www 1812 Sep 13 09:59 gitlab.php
    -rwxrwxrwx 1 www www  138 Sep 13 09:59 master_deploy.sh
    -rwxrwxrwx 1 www www   88 Sep 13 09:59 README.md
    -rwxrwxrwx 1 www www  673 Sep 13 11:09 webhook.log
    
  3. 配置Gitlab项目Webhooks

    进入你的gitlab控制台 =》选择项目 =》 设置 =》 Webhooks设置,新加Webhooks

    FD9B927C-39FD-4DC7-B9F5-F8477410FF8C

    类似的URL与Secret Token:

    http://server/gitlab-webhook-php/gitlab.php?token=MmNmMGRmMGI2Y2EyYjY3NzFjMzRjODkzZTQ3NjY5M2Y=
    
    MmNmMGRmMGI2Y2EyYjY3NzFjMzRjODkzZTQ3NjY5M2Y=
  4. 测试服务器是否通信成功

    $ tail webhook.log
    BRANCH: refs/heads/master
    =======================================================================
    Request on [2016-09-13 10:28:01] from [118.178.58.22]

    如果有类似的日志,表示webhook通信成功,如果项目中的文件无任何修改就一定是权限的问题

  5. 权限配置

    最开始配置成功后,非常多的人会遇到这个问题:Webhook通信成功,但是仓库源码却没有更新?在Linux环境中,我们需要先确认Nginx与php-fpm的默认执行用户

    $ sudo ps aux | grep php
    www      22131  0.0  0.2  42872 23096 ?        S    02:13   0:03 nginx: worker process
    www      22132  0.0  0.2  42900 23352 ?        S    02:13   0:01 nginx: worker process
    
    $sudo ps aux | grep php-fpm
    www      22347  0.0  0.1 163832  9008 ?        S    02:13   0:00 php-fpm: pool www

    确认是www用户在运行,也即是说gitlab中的Webhooks的所有请求都是以www用户在执行。再次查看我们的hook for php脚本

    $ cat gitlab.php
    ...
    exec("/mnt/www/project/public/gitlab-webhook-php/master_deploy.sh");
    ...

    http://server/gitlab-webhook-php/gitlab.php?... 此请求默认以www 用户去访问gitlab.php,然后执行master_deploy.sh脚本。因此,需要给www用户设置 Public Key Authentication

    $ sudo mkdir /home/www
    $ sudo -u www ssh-keygen -t rsa
    ...
    $ cat /home/www/.ssh/id_rsa.pub

    将此公钥加入gitlab中的SSH KEYS中

  6. 设置项目的文件夹用户与用户组为www

    $ sudo chown -R www:www /mnt/www/project

如果在配置过程中有问题,可以@我的微博:会勇同学或者邮箱:[email protected]

gitlab-webhook-php's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.