1、安装gitlab
2、登录gitlab新建项目,如test
3、在项目settings→Integrations Settings,增加一项,URL是你要部署到的服务器上的一个可以访问的地址,

auto-deploy.php代码示例:
<?php
// 生产环境web目录
$web_path = '/home/wwwroot/test';
//作为接口传输的时候认证的密钥
$valid_token = 'asdfggg';
//调用接口被允许的ip地址
$valid_ip = array('192.168.8.219','192.168.10.1');
$client_ip = $_SERVER['REMOTE_ADDR'];
file_put_contents('client_ip.log',$client_ip);
if (!in_array($client_ip,$valid_ip)){
die('ip invalid!');
}
$signature = isset($_SERVER['HTTP_X_GITLAB_TOKEN'])?$_SERVER['HTTP_X_GITLAB_TOKEN']:getHeader()['X_GITLAB_TOKEN'];
if (empty($signature) || $signature !== $valid_token) {
exit('Invalid token request:'.$signature);
}
$repo = $data['repository']['name'];
echo shell_exec("ls");
$cmd = "cd $web_path && git pull 2>&1";
$out=shell_exec($cmd);
print_r($out);
function getHeader() {
$headers = array();
foreach ($_SERVER as $key => $value) {
if ('HTTP_' == substr($key, 0, 5)) {
$headers[str_replace('_', '-', substr($key, 5))] = $value;
}
if (isset($_SERVER['PHP_AUTH_DIGEST'])) {
$header['AUTHORIZATION'] = $_SERVER['PHP_AUTH_DIGEST'];
} elseif (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
$header['AUTHORIZATION'] = base64_encode($_SERVER['PHP_AUTH_USER'] . ':' . $_SERVER['PHP_AUTH_PW']);
}
if (isset($_SERVER['CONTENT_LENGTH'])) {
$header['CONTENT-LENGTH'] = $_SERVER['CONTENT_LENGTH'];
}
if (isset($_SERVER['CONTENT_TYPE'])) {
$header['CONTENT-TYPE'] = $_SERVER['CONTENT_TYPE'];
}
}
return $headers;
}4、在待部署服务新建相应的目录,并初始化git,如
mkdir /home/wwwroot/test git init git remote add origin 此处仅为方便演示使用的http连接,可换为ssh或者https,密码配置请自行搜索搞定 git pull origin master git branch --set-upstream-to=origin/master master git pull
如果从已存在的目录创建的话,可能会出现错误
error: The following untracked working tree files would be overwritten by merge
按下面执行(以防万一,请先备份源目录)
git fetch origin git clean -f git reset --hard origin/master
5、将上面目录的所属用户改为你的php容器的账号,比如使用的php-fpm,允许用户为www
chown -R www /home/wwwroot/test
6、在待部署服务器创建第二步中使用的链接
http://test.com/hook/auto-deploy.php
以你的gitlab服务器能够访问为准
7、通过gitlab项目后台设置Integrations中,发起测试

8、正常情况下,现在提交到master的所有push,待部署服务器都会自动pull下来了~
Enjoy~
