gitee自动部署的使用

缘起

给朋友做的小项目,托管在gitee上,每次修改都要登录到服务器上执行命令:

git pull

后了解到git的钩子机制,进而发现了gitee的webhook,现在说下这玩意怎么用。

原理

gitee自动部署的使用_第1张图片

  1. 本地执行 git push 命令,push代码到gitee的服务器上。
  2. gitee接收到push请求后,调用我们自己的服务器上的一个接口。
  3. 这个接口下的代码来执行 git pull 和重启服务等命令(如果需要的话) 完成代码的部署。

实操

上面的过程中,我们需要做的就是实现一个接口。这个可以完成拉取代码、重启服务等步骤,如果是php开发的应用,只需要pull代码即可。

实现接口

这个接口可以用自己熟悉的语言开发,比如php,python等脚本语言,简单粗暴。

下面我们来用php写一个demo

demo

新建一个叫做build.php的文件,添加一下内容



$cmdRes = shell_exec('git pull');

echo $cmdRes;

这个文件中,通过 shell_exec 函数直接执行 git pull 命令,达到同步代码的效果。

ps:这份代码并不完善,需要增加来源验证,日志记录,安全验证等逻辑

排坑

执行用户的权限问题

例如php的项目一般是借助php-fpm来处理请求,这时需要注意php-fpm的配置文件中是配置了一个系统用户来执行逻辑的。需要将这个用户的公钥配置到gitee上,如果这个用户还没有配置公钥,可以通过一下命令来生成。

sudo -u [用户名] ssh-keygen -t rsa -C "[email protected]"

这里注意下,如果不清楚php-fpm的用户名,可以通过查看php-fpm进程的方式知道名字

[root@local ~]# ps -ef | grep php
root     13715     1  0 7月23 ?       00:00:04 php-fpm: master process (/etc/php-fpm.conf)
apache   13716 13715  0 7月23 ?       00:00:00 php-fpm: pool www
apache   13717 13715  0 7月23 ?       00:00:00 php-fpm: pool www
apache   13718 13715  0 7月23 ?       00:00:00 php-fpm: pool www
apache   13719 13715  0 7月23 ?       00:00:00 php-fpm: pool www
apache   13720 13715  0 7月23 ?       00:00:00 php-fpm: pool www
apache   15427 13715  0 15:42 ?        00:00:00 php-fpm: pool www
apache   16296 13715  0 16:42 ?        00:00:00 php-fpm: pool www
root     16752 16736  0 18:07 pts/0    00:00:00 grep --color=auto php

我这里的用户名是apache

或者将php代码中要执行的命令修改为

$cmdRes = shell_exec('whoami');
var_dump($cmdRes); exit;

这样调用这个接口也可以知道这个用户名是什么。

最后将公钥配置到gitee上。

文件权限问题

需要将代码的owner全部修改为php-fpm的用户

你可能感兴趣的:(其他)