通过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
本地提交代码到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