通过gitlab的webhook进行网站的自动发布
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过gitlab的webhook进行网站的自动发布相关的知识,希望对你有一定的参考价值。
作用:
本地提交代码到git仓库以后,自动同步到服务器,避免每次重新登录到服务器去pull代码。
本人主要用于管理开发环境和测试环境,在频繁修改开发代码时,每次通过提交git仓库,自动同步到测试环境,减少单独去发布测试环境的过程。
配置测试环境:
Linxu 系统,nginx,php,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进行网站的自动发布的主要内容,如果未能解决你的问题,请参考以下文章
jenkins 配置 gitlab webhook 实现自动发布
Jenkins+Gitlab配置Webhook实现提交自动部署