gitlab通过webhook自动化部署
问题描述:
以往开发时需要频繁上传代码到服务器很麻烦,能否将提交到版本控制的代码自动同步到服务器呢,答案是可行的
如果使用的是SVN的话服务器搭建SVN可以自动同步代码,这里不做介绍,下面以github,php环境为例介绍,其他环境类似
原理:
当git仓库发生变动时(推送,合并等),利用web钩子向服务器发送一条指令,服务器收到请求后,去相应的目录 git pull 代码
以gitlab 和PHP为例
实现:
配置ssh部署秘钥
修改/etc/passwd文件,使www用户具有可登录权限
现在我们要登进www账户,创建ssh文件,然后连一下gitlab
vim /etc/passwd
;www:x:22:22:www:/var/www:/usr/sbin/nologin
www:x:22:22:www:/var/www:/bin/bash
当自动化部署完成后,要该回到原来的配置,因为www用户默认是不允许登录服务器的。
按以下步骤操作:
- 执行 su www 命令切换为www用户。
- 执行 ssh-keygen 命令,将生成的公钥(位置在/home/www目录下),添加到gitlab中的项目中
gitlab中部署秘钥里填入当前生成的ssh秘钥
然后在网站目录下执行下 git pull 把代码拉取一次
完成后把www账户的login权限去掉
webhook配置
1.服务端脚本server.php,valid_token为授权码,确保外网可以访问到
<?php
error_reporting(1);
$valid_token='erd6e2r3';
$client_token = $_SERVER['HTTP_X_GITLAB_TOKEN'];
$client_ip = $_SERVER['REMOTE_ADDR'];
if ($client_token !== $valid_token) die('token验证失败!');
$valid_ip = array('118.31.85.105'); //这里填你的gitlab服务器ip
if (!in_array($client_ip, $valid_ip)) die('Ip mismatch!');
error_log("log start :'.".shell_exec("cd /www/wwwroot/server && git pull"),3,"/www/wwwroot/weball/erver/errorsgitlab.log");
2.gitlab 配置web钩子
3.服务端配置git ,并git clone 此项目 ,
4.点击测试 确认是否正常