通过gitlab的webhook进行网站的自动发布

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过gitlab的webhook进行网站的自动发布相关的知识,希望对你有一定的参考价值。

作用:
本地提交代码到git仓库以后,自动同步到服务器,避免每次重新登录到服务器去pull代码。
本人主要用于管理开发环境和测试环境,在频繁修改开发代码时,每次通过提交git仓库,自动同步到测试环境,减少单独去发布测试环境的过程。
技术分享
配置测试环境:
Linxu 系统,nginxphp,GitLab

原理:
1.建立一个勾子文件,作用是通过php程序去pull代码。
2.本地提交代码到git仓库时,通过webhook设置,去触发1中建立的勾子文件,以实现代码同步。
3.设置ssh-keygen,让勾子文件执行pull时,有权限从git仓库pull代码。

测试步骤:

1.勾子文件配置
1.1在/web/test/下建立git目录     #勾子文件存放目录
1.2在/web/test/git/下建立一个php文件,test_hook.php   #勾子文件
1.3在勾子文件里写执行pull代码的操作。
如下
define("ROOT_PATH","/web/test/");

if (is_dir(ROOT_PATH."www.test.com")){
   system("rm -rf /web/test/www.test.com");
}

system("cd /web/test && git clone [email protected]:xxx/www.test.com.git");
system("cd /web/test/www.test.com && git checkout develop");
system("chmod -R 666 /web/test/www.test.com/");

#勾子文件的作用就是php来执行git命令。以上代码是每次重新conle一份,也可以每次只更新最新修改,不重新clone。看自己需求和喜好。

说明:
/web/test/  #测试环境代码根目录
/web/test/www.test.com  #测试环境test站点目录
/web/test/git/  #存放勾子文件的目录
/web/test/git/test_hook.php  #勾子文件

配置访问路径:建议用IP访问。
如 http://10.10.10.139/test_hook.php

2.配置 deploy key
2.1生成 apache 的 deploy key
#sudo -u apache ssh-keygen -t rsa -C “[email protected]
根据提示,一直回车即可
成功后会生成两个文件id_rsa和id_rsa.pub
2.2将id_rsa.pub中的内容全部复制
2.3在GitLab中Settings->Deploy Keys 中,新增Deploy Keys 将刚才复制的内容粘key的输入框里。

3.配置 Web Hooks
3.1在GitLab中Settings->Web Hooks 中,将1中的勾子文件访问url(http://10.10.10.139/test_hook.php),粘到url输入框中,设置Trigger中哪个操作事件可以来触发。

经过以上三个步骤,基本配置完毕,可以测试将代码推送到git仓库,然后查看/web/test/下,www.test.com是不是已经自动更新了~~

注意事项
1.各目录的权限问题
1.1如/web/test可写权限等
2.勾子文件没权限执行pull
2.1有些php程序以www用户来执行,php去执行脚本也是以www用户执行的
2.2.结果发现,之前设置的ssh密钥是以root用户来设置的,php以www用户执行脚本中的git pull 命令时就没有权限
2.3.通过设置www下的ssh密钥, sudo -u www ssh-keygen ...  以www用户执行生成密钥的操作
2.4.gitlab的deploy keys 可以设置ssh密钥只能针对指定的项目,所以,针对项目的,我们将rsa.pub贴到指定项目的deploy keys中去,而针对用户的,我们将ssh密钥贴到gitlab的用户信息的ssh keys中去。
3.查看php是哪个用户在执行 

本文出自 “Jeff on the way” 博客,请务必保留此出处http://nrain.blog.51cto.com/11930278/1878552

以上是关于通过gitlab的webhook进行网站的自动发布的主要内容,如果未能解决你的问题,请参考以下文章

通过webhook构建Jenkins项目

jenkins 配置 gitlab webhook 实现自动发布

jenkins+gitlab+webhook实现自动发布

Jenkins+Gitlab配置Webhook实现提交自动部署

gitlab jenkins配置WebHook控制代码提交自动构建

利用GitLab webhook来实现触发Jenkins自动操作