码云配置ssh
这一部分主要是服务器生成ssh key配置到码云,不需要拉代码时再输入用户名和密码,如果这部分已经弄好的朋友可以跳过。
生成ssh key
在linux服务器执行如下命令:
ssh-keygen -t rsa -C "这里输入自己的邮箱地址作为标识"
# 敲三个回车即可生成
cat ~/.ssh/id_rsa.pub
# 复制cat查看的公钥
码云配置公钥
登录码云->用户头像->设置->安全设置->SSH公钥->添加公钥
如果找不到也可以通过下面的链接直接一步到达:https://gitee.com/profile/sshkeys,当然你得先登录码云才可以
配置仓库以ssh链接拉取代码
git remote set-url origin ssh链接
添加WebHooks
注意这个操作是在某个仓库的界面
管理->管理->WebHooks->WebHooks管理->添加
添加一个自己服务器能访问的URL,设置一个密码,然后点击添加。
注意这里密码那不要选择签名密钥,目前我偿试使用PHP生成签名和码云服务器返回的签名对不上。
服务器脚本设置
在编写脚本之前我们还需要对服务器作一些设置,由于我外网访问我们URL时使用的不是root用户,我这里用的是www用户,因此需要给www用户可以sudo 执行git 的权限
编辑sudoers
vim /etc/sudoers
# 添加一行
www ALL=NOPASSWD:/usr/local/git/bin/git
# 强制保存退出
!wq
上面一行的意思就是www用户可以无密码通过sudo以root权限执行git
编写脚本
以下是我写脚本,可以根据自己的需求修改
WebHooks.php
<?php
$password = '码云设置的密码';
if (empty($_SERVER['HTTP_X_GITEE_EVENT'])) {
error(1);
}
if ($_SERVER['HTTP_X_GITEE_EVENT'] != 'Push Hook') {
error(2);
}
if (empty($_SERVER['HTTP_X_GITEE_TOKEN'])) {
error(3);
}
if ($_SERVER['HTTP_X_GITEE_TOKEN'] != $password) {
error(4);
}
// 这里要把项目的目录修改成自己的项目目录,git改成自己的git地址
$res = shell_exec("cd /项目目录 && sudo /usr/local/git/bin/git pull");
success($res);
function success($data) {
echo json_encode([
'code' => 0,
'msg' => 'ok',
'data' => $data,
]);
exit;
}
function error($code) {
echo json_encode([
'code' => $code,
'msg' => 'fail',
'data' => '',
]);
exit;
}
测试
可以先在码云添加WebHooks界面点击测试,或者直接上传代码测试一下。