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~