gitlab安装与PHP代码自动更新
作者:andy.zhang | 分类:未分类 | 浏览:323 | 日期:2022年07月21日1,安装gitlab:
注意:gitlab分社区版和企业版,本文以gitlab-ce(社区版)为标准
下载:到gitlab官网下吧。这里不提供连接。
1)准备好一台安装有linux系统的服务器。本文以虚拟机做服务器。
分别定好gitlab的数据盘和安装路径(/var/opt/gitlab/git-data和/opt/gitlab)
建议/opt/git随系统,安装在根分区下,/var/opt/gitlab/git-data可以等gitlab安
装完成后,再挂分区。
2)yum install -y curl policycoreutils-python openssh-server perl
安装支持包
3)rpm -i gitlab-ce-15.1.2-ce.0.el7.x86_64.rpm
安装gitlab-ce,注意一下路径,由于是事先下载并存放在指定目录上。
等软件自动安装,完成后,用echo $?命令看有没有报错。如果没有,安装正确。
4)初始化gitlab,生成数据保存路径。命令如下:
gitlab-ctl reconfigure
echo $?
同样,用echo 检查看有没有报错。
5)挂载gitlab代码保存磁盘。 编写/etc/fstab,令随系统启动生效。
在这里,不详细说明。
6)登录admin管理做页面上用户等配置。至此,基本完成
7)PHP自动发布:
准备工作:代码发布域名,代码运行域名(项目)
首先,当然让开发把代码存放在gitlab上。然后,在项目下面选择设置。
如上图:网址是发布代码的域名;比如:pushcode.xx.com/webhook.php,这里是一个更新代码,
webhook.php这个文件要存放在发布代码域名下面。代码如下:
<?php
//网站目录
$www_file='/你的代码存放路径/';
//打开网站目录下的hooks.log文件,需要在服务器上创建,并给写权限,注意一下属主即可。
$fs = fopen('/data/wwwroot/hooks.log', 'a');
fwrite($fs, '================ Update Start ==============='.PHP_EOL.PHP_EOL);
//自定义字串掩码 用于验证,Secret 令牌的内容。
$access_token = 'QhNO8YHqym5PHQQsexapF7041xOhzm62DRH';
//接受的ip数组,也就是允许哪些IP访问这个文件 这里是gitlab服务器IP
// $access_ip = array('192.168.1.15','14.xxx.xxx.19');
//如果使用www.xxx.com/xxx.php?token=xxxxxxx 的方式来传送验证字符串,则用这个方法获取 #
$client_token = $_GET['token'];
// 获取请求端的secret token
$client_token = $_SERVER["HTTP_X_GITLAB_TOKEN"];
//获取请求端的IP
$client_ip = $_SERVER['REMOTE_ADDR'];
//把请求的IP和时间写进log
fwrite($fs, 'Request on ['.date("Y-m-d H:i:s").'] from ['.$client_ip.']'.PHP_EOL);
//验证token 有错就写进日志并退出
if ($client_token !== $access_token) {
echo "error 403";
fwrite($fs, "Invalid token [{$client_token}]".PHP_EOL); exit(0);
}
//验证ip 验证同一网段。这里只在局域网部署,忽略了。
// if ( !in_array($client_ip, $access_ip)) {
// echo "error 503";
// fwrite($fs, "Invalid ip [{$client_ip}]".PHP_EOL);
// exit(0);
// }
//获取请求端发送来的信息,具体格式参见gitlab的文档
$json = file_get_contents('php://input');
$data = json_decode($json, true);
//如果有需要 可以打开下面,把传送过来的信息写进log #
fwrite($fs, 'Data: '.print_r($data, true).PHP_EOL);
//执行shell命令并把返回信息写进日志 注意一下运行用户。比如,我nginx用的是www。
$output=shell_exec("cd $www_file && git pull 2>&1");
fwrite($fs, 'Info:'. $output.PHP_EOL);
fwrite($fs,PHP_EOL. '================ Update End ==============='.PHP_EOL.PHP_EOL);
$fs and fclose($fs);
?>
注意事项:1,需要先做一次git拉取代码的操作。例如如:sudo -u www git clone -b testing git@gitlab.xx.com:xxxxx/xxx.git
这些操作,如有不懂,百度解决。
点击”Add webhook“,如果没有报500错误码,应该正常,并在底下新增一个Project Hooks,这时,你提交并PUSH代码,就会自动更新到webhook.php里写的代码存放路径了。至此,gitlab自动更新PHP代码完成。