您当前的位置:首页 > 分类 > 技术资讯 > LINUX > 正文

通过gitlab的webhook进行项目的自动部署

发布时间:2016-07-07 14:27:01      来源:51推一把
【摘要】通过gitlab的webhook进行项目的自动部署的作用,本地提交代码到git仓库以后,自动同步到服务器,避免每次重新登录到服务器去pull代码。
作用:
本地提交代码到git仓库以后,自动同步到服务器,避免每次重新登录到服务器去pull代码。
本人主要用于管理开发环境和测试环境,在频繁修改开发代码时,每次通过提交git仓库,自动同步到测试环境,减少单独去发布测试环境的过程。


配置测试环境:
Linxu 系统,Nginx,Php,GitLab

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

测试步骤:

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

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

system("cd /home/www && git clone git@code.xxx.com:xxx/www.test.com.git");
system("cd /home/www/www.test.com && git checkout develop");
system("chmod -R 666 /home/www/www.test.com/");

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

说明:
/home/www/  #测试环境代码根目录
/home/www/www.test.com  #测试环境test站点目录
/home/www/webhooks/  #存放勾子文件的目录
/home/www/webhooks/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 “test@example.com”
根据提示,一直回车即可
成功后会生成两个文件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仓库,然后查看/home/www/下,www.test.com是不是已经自动更新了~~

注意事项
1.各目录的权限问题
1.1如/home/www/可写权限等
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是哪个用户在执行 http://www.51tuiyiba.com/news_view-1184.html