基本流程如下:当你把代码推送到服务器后,coding会向你设置的webhook地址发送一个请求,当你的服务器接收到这个请求后,进行git pull操作即可
我们需要:部署公钥(coding需要)
//我们以宝塔默认创建的用户www为例(密码请选择: no passphrase,之后一路回车即可)
sudo -Hu www ssh-keygen -t rsa
//如果提示没有/home/www/.ssh/目录的化,手动创建/home/www/即可(注意在root用户下创建,创建后需要注意用户组和用户主为www)
//创建目录以及修改目录权限
mkdir /www/wwwroot/webhook.com/
chown www:www /www/wwwroot/webhook.com/
//编写钩子文件
sudo -Hu www touch /www/wwwroot/webhook.com/webhook.php
钩子文件内容
$target = '/www/wwwroot/'; // 生产环境web目录
error_reporting(E_ALL|E_STRICT);
ini_set("display_errors",'1');
$json = json_decode(file_get_contents('php://input'), true);
//可以根据json内容做逻辑判断
$repo = isset($json['repository']['name'])?$json['repository']['name']:"silicon";//silicon 默认项目目录名 换成自己的
$target = $target.$repo;
$cmd = "cd $target && git pull 2>&1";
opcache_reset();//清空opcache
echo shell_exec($cmd);
配置coding用户公钥
复制/root/.ssh/id_rsa.pub的内容,在下面地址内添加公钥即可
https://coding.net/user/account/setting/keys
复制/home/www/.ssh/id_rsa.pub的内容,在coding项目 内设置部署公钥即可
同样在coding项目设置内设置webhook地址,该地址为第三步创建的公网上可访问的待部署服务器上的钩子文件地址(所以需要你的服务器可被公网访问,如果不行,那就只能配置端口转发来实现这个目的
添加完成后,点击测试,弹出绿色对勾既是访问正常
//一定注意 指定初始化clone必须使用www用户以及Git仓库地址为ssh地址
sudo -Hu www git clone git@git.coding.net:******.git --depth=1
现在我们在本地提交一次代码,并推送到master,就会自动拉取了
倘若部署成功后,cli模式下运行正常,但是浏览器模式下运行总是失败的话
亲身经历,部署时浏览器访问无返回值,修改钩子代码
.......
$cmd = "cd $target && git pull 2>&1";#增加输出
echo shell_exec($cmd);
可惜后来还是出现问题,经过查证,是php运行用户www权限不足导致的,手动提权后才恢复正常(不建议提权)
切换为root用户
执行visudo,修改配置文件(sudo提权,免输密码)
添加 www ALL=(ALL) NOPASSWD: ALL
保存
修改钩子文件
.......
$cmd = "cd $target && sudo git pull 2>&1";#使用sudo 提权
echo shell_exec($cmd);