Git OSChina 使用 Webhooks 自动部署代码

年初的时候玩了会树莓派,当时电话电信客服申请了一个静态 ip,配合家里的极路由搞了个私人服务器,但由于树莓派性能一般,导致其访问速度也一般,后面就把它扔到角落里了,将其 ip 绑定到我那服役了四年的老 MBP 上,因为 MBP 是 SSD 的缘故吧,访问的速度也是杠杠的。

我的项目基本上都是放在 git oschina 上,为了方便演示我会把代码更新到 MBP 上,通过绑定的域名来访问。每次在公司想要更新家里的 MBP 的时候都是通过 SSH 登上去 git pull 一下,来回操作的次数多了,久而久之就觉得麻烦,想有什么办法是否可以自动更新,网上了解了下可以通过 git webhooks 来实现。

自己把具体的操作过程记录一下,怕以后忘记了 -.-

1、通过 SSH 登录我的 MPB,输入 who 命令查看确认当前用户

2、生成 deploy key

1
sudo -u jankerli ssh-keygen -t rsa -C "jankerli@gmail.com"

copy 下生成的 key,后面会用到,类似:

1
SHA256:6dDFAi+GCCaPQmGQMbzXS2X3YWSnDm8WQlgm0IfKd8s jankerli@gmail.com

3、在需要自动同步的仓库打开 hook

1
2
cd /project/.git/hooks/
vi post-receieve

添加以下代码:

1
GIT_WORK_TREE=/path/to/your/repo git checkout -f

4、加入接收 webhook 的脚本,这里我使用的 php

在根目录或者所在项目目录下创建 update.php,代码如下:

1
2
3
4
5
6
7
8
9
<?php
$www_folder = "/path/to/your/repo" ;
// git仓库地址
$git_repo = "https://git.oschina.net/***/***.git" ;
// 执行指令
echo shell_exec(" cd $www_folder && git pull $git_repo 2>&1 ");
?>

5、在 git oschina 所在的项目仓库里点击 管理 → WebHooks

URL:xxxxx/update.php
密码:上面 copy 的 6dDFAi+GCCaPQmGQMbzXS2X3YWSnDm8WQlgm0IfKd8s