平时项目代码都托管在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
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所在的网址。比如: 令牌可选,但是建议写上。
初始化
我们需要先在服务器上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,稍过几秒,正常的话你在配置的项目目录里就会有你的项目文件了。
原文链接:https://www.f2er.com/git/420839.html