加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

WebHook实现PHP自动部署Git代码

发布时间:2020-12-14 16:41:07 所属栏目:百科 来源:网络整理
导读:平时项目代码都托管在Coding,然后每次提交了代码之后都要SSH到服务器上去git pull一次,很是繁琐,在看了OverTrue的《使用PHP脚本远程部署git项目》后就尝试在自己服务器上搞一下自动化部署,下面把部署步骤列出来算是一个分享与备忘。本笔记摘录于萧晔离。

平时项目代码都托管在Coding,然后每次提交了代码之后都要SSH到服务器上去git pull一次,很是繁琐,在看了OverTrue的《使用PHP脚本远程部署git项目》后就尝试在自己服务器上搞一下自动化部署,下面把部署步骤列出来算是一个分享与备忘。本笔记摘录于萧晔离。

服务器端

生成公钥

git 用户公钥

ssh-keygen -t rsa -b 4096 -C "gorgle@gorgle.online"

部署公钥

sudo -Hu www ssh-keygen -t rsa

请选择 “no passphrase”,一直回车下去

准备钩子文件

创建及修改目录权限

mkdir /home/wwwroot/website.com/hook
chown -R www:www /home/wwwroot/website.com/hook

编写钩子文件

sudo -Hu www touch /home/wwwroot/website.com/hook/index.php

文件代码如下

error_reporting(1);

$target = '/home/wwwroot/website.com'; // 生产环境web目录

$token = '您在coding填写的hook令牌';
$wwwUser = 'www';
$wwwGroup = 'www';

$json = json_decode(file_get_contents('php://input'),true);

if (empty($json['token']) || $json['token'] !== $token) {
exit('error request');
}

$repo = $json['repository']['name'];

// $cmds = array(
// "cd $target && git pull",// "chown -R {$wwwUser}:{$wwwGroup} $target/",// );

// foreach ($cmds as $cmd) {
// shell_exec($cmd);
// }

// 感谢@墨迹凡指正,可以直接用www用户拉取代码而不用每次拉取后再修改用户组

$cmd = "sudo -Hu www cd $target && git pull";

shell_exec($cmd);

需要注意的是保证文件能访问

修改git配置和保存git用户名密码

sudo -Hu www git config --global credential.helper store # 永久保存
sudo -Hu www git config --global user.name "Bantes" 
sudo -Hu www git config --global user.email "admin@xsooo.com" # 邮箱请与conding上一致

coding 上

添加用户公钥

复制/root/.ssh/id_rsa.pub内容到个人设置页的SSH公钥里添加即可()

添加部署公钥

复制/home/www/.ssh/id_rsa.pub的内容并添加到部署公钥

选择项目 > 设置 > 部署公钥 > 新建 > 粘贴到下面框并确认

添加hook

选择项目 > 设置 > WebHook > 新建hook > 粘贴你的hook/index.php所在的网址。比如: 令牌可选,但是建议写上。

稍过几秒刷新页面查看hook状态,显示为绿色勾就OK了。

初始化

我们需要先在服务器上clone一次,以后都可以实现自动部署了

sudo -Hu www git clone https://git.coding.net/yourname/yourgit.git /home/wwwroot/website.com/  --depth=1

这个时候应该会要求你输入一次Coding的帐号和密码,因为上面我们设置了永久保存用户名和密码,所以之后再执行git就不会要求输入用户名和密码了。

注意,这里初始化clone必须要用www用户

往Coding.net提交一次代码测试

在本地clone的仓库执行

git commit -am "test hook" --allow-empty
git push

OK,稍过几秒,正常的话你在配置的项目目录里就会有你的项目文件了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读