随枫--博客

或许是不知梦的缘故,流离之人追逐幻影!

Coding上配置WebHook(环境:Centos,Nginx)

    对于coder来说,一般都把代码放在Github或Coding上。每次做了修改之后,我们需要用git push把代码提交到代码仓库上,然后在服务器执行git pull,将仓库中新代码拉取到服务器中。但是这个过程需要我们登录服务器进行拉取操作,于是为了方便起见,配置WebHook是很有必要的。

    博主在参考了萧晔离勤奋的小青蛙的文章之后,亲自实践在Coding上配置WebHook,以此文记录自己的步骤和遇到的问题。

    WebHook原理很简单:本地提交代码到仓库时,触发Push,然后请求钩子文件,执行git pull。

    1.创建项目用户及用户组

    安装完系统之后,默认只有root用户,为了安全考虑,我们需要建立一个用户进行日常的项目维护。看到大部分coder都建立www用户和www组,博主也不例外。

    创建组

groupadd www

    创建用户并加入到组中

useradd www -g www

    2.修改默认用户

    注意:由于后续我们通过www用户进行webhook php脚本执行,所以我们需要修改默认的php-fpm(apache),Nginx(anybody)默认用户

    2.1修改php-fpm默认用户

vim /etc/php-fpm.d/www.conf

    修改user,group ,将user和group均改为www

user = www
group = www

    2.2修改Nginx默认用户

vim /etc/nginx/nginx.conf

    修改user,将user改为www

user www

    2.3重启php-fpm,Nginx服务(当然你可以用常用的命令)

systemctl restart php-fpm.service 
systemctl restart nginx.service

    可以通过以下命令查看是否修改成功

图示.png

    2.4配置git用户信息

    由于我们用www用好来拉取代码,所以我们这里要配置git用户为www

sudo -Hu www git config --global credential.helper store # 永久保存
sudo -Hu www git config --global user.name "your name"
sudo -Hu www git config --global user.email "your email" #与你在码云上的邮箱一致

    注意:博主的环境在家目录(~)执行上面命令出错了,出错如下 fatal: failed to stat '.': Permission denied博主切到根目录(/)  cd /  然后执行上面的命令,没问题

    如果您想查看您是否设置成功,这里需要切换到 www 用户, 

su www
git config user.name
git config user.email

    3.生成公匙(git用户公匙和部署公匙)

    git用户公匙

ssh-keygen -t rsa -C "youremail@com"  #注意将邮箱替换成你自己的

    保存位置为 /root/.ssh/,基本上一路回车

    www用户公匙

su www
ssh-keygen -t rsa

    保存位置为 /home/www/.ssh/,也是一路回车

    4.创建一个个人项目

    博主创建了一个test项目,并将项目git clone到本地

    5.添加公匙到Coding

    添加用户公匙:个人设置页->SSH公匙->添加公匙

    复制/root/.ssh/id_rsa.pub内容

    添加部署公匙:项目主页面->管理->部署公匙管理->添加公匙

    复制/home/www/.ssh/id_rsa.pub内容

    6.服务器上第一次拉取及建立钩子文件

    注意:这里一定要用www用户拉取一次

    6.1第一次拉取

    su www,此时shell终端是 www@xxx,并且提示符是$

git clone git@gitee.com:your username/your projectname.git #将地址替换成你的地址

    拉取完之后该项目所属用户应该是www和www组,如果不是cd到该项目目录所属修改用户 chown www:www *

    6.2创建钩子文件

    注意:您可以在您的项目目录中创建该文件,也可以在该文件单独创建一个项目来管理,博主这里是在服务器创建了一个hook目录(多站点方式),不管用何种方式,必须保证改文件能通过浏览器访问

    钩子文件内容如下:

<?php
  error_reporting(1);
  $target = '/var/www/test'; // 生产环境web目录,注意替换成你的目录
  $password = 'your password';//将密码替换为你将要设置的密码,当然你在这里可以先不填
  $json = json_decode(file_get_contents('php://input'), true);
  //file_put_contents('test.txt', date('Y-m-d H:i:s', time()).json_encode($json), FILE_APPEND); //将请求参数写入文件,以便调试
  //博主参考的文章这里用的是token,码云现在用的是password,博主在这里卡了很久
  if (empty($json['password']) || $json['password'] !== $password) {
    exit('error request');
  }
  $repo = $json['repository']['name'];
  $cmd = "cd $target && git pull";
  $res = shell_exec($cmd);   
  //file_put_contents('test.txt', $res, FILE_APPEND);  //同上
  echo 'success';

   注意:修改钩子文件所属用户为www: chown -R www:www yourfile

    6.3将改钩子文件路径加入到Coding

    管理->WebHooks

    将您钩子文件的url写入到URL,密码为您需要设置的密码(此处与钩子文件中的password相同),选中Push,然后提交;提交完成之后,点击测试,正常情况下这里会输出success(如果没有输出,则坚持您钩子文件是否正确,路径是否正确,是否能被访问)

    至此,配置已完毕,本地提交代码到Coding,然后在服务器项目目录查看,是否有新增,如果有新增,perfect,WebHook配置完毕,congratulation,没有拉取的话,仔细查看您的步骤,当然不一定要完全按照博主的步骤来(参考本文末尾的三篇文章已经足够了),思路对了就可以,good luck。


    参考:

    http://www.jyguagua.com/?p=2683

    https://m.aoh.cc/149.html

    http://overtrue.me/articles/2015/01/how-to-deploy-project-with-git-hook.html