php通过git pull拉取代码
有个本地项目放在局域网服务器上,代码偶尔要做些修改。公司正式环境用的gitlab+jenkins来管理和发布代码,但是本地项目每次都通过Jenkins来发布显得流程过长太正式了一点,于是想着用gitlab自己的webhook每次推送的时候触发php通过git去pull代码,以此实现自动发布。
说干就干,首先要在gitlab的项目里面配置webhook,填好php执行pull的的地址。
代码是放在linux服务器上的,因此目录和命令是基于linux终端命令,PHP部分如下:
<code>
<?php
$pwd = $_SERVER['HTTP_X_GITLAB_TOKEN'] ?? '-1';
if($pwd!='你在gitlab的web设置的secret'){
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");
die;
}
@exec("cd 你的git项目发布目录 && sudo git pull");
</code>
有一点很重要,php的exec函数要保证是可用的,可用先phpinfo()看看,然后在/etc/sudoers下需要加一行:
<code>
用户 ALL=(ALL) NOPASSWD: ALL
#我的php用户是nginx,所以是 nginx ALL=(ALL) NOPASSWD: ALL 不知道自己的php是属于哪个用户在运行可用执行ps -aux|grep php来看看,一般就是www、www-data、apache、nginx这些
</code>
如果编辑/etc/sudoers的时候提示文件只读那可用先执行chmod u+w /etc/sudoers改下权限,当然执行chmod得有root权限才行。
<span style="color:red">ps:正式环境不推荐这么干,git直接拉代码在生产环境风险很大,php可执行的权限太高也容易产生漏洞!</span>
更多>>