Gogs 设置Git钩子实现项目远程自动更新
Gogs 设置Git钩子实现项目远程自动更新
在没有接触到Git Hook之前,我一直都是在本地将代码push到远程仓库,然后再ssh到服务器上git pull,想起来都手酸。这样手工操作不仅繁琐,还非常容易出错。好在Git为我们提供了hooks这种好东西,能够在特定的事件触发时执行我们写好的脚本,实现自动化部署。
我的环境
两台服务器:Git服务器(服务器1) Web服务器(服务器2)
说明:两台服务器不在一个内网,web服务器在国内,git服务器在香港。我本地git push代码到香港服务器中,然后通过git hooks服务连接国内web服务器git pull代码,实现自动更新代码,即可自动部署。
搭建Git服务器
git服务器可以选择gitlab或者gogs, 本文选择gogs。gitlab是一个非常好的项目管理平台,而我在入门级的阿里云安装过,非常卡导致服务器动弹不得,直接卡死,重启,卸载。gogs非常轻量化,入门级服务器安装非常好,gogs安装请参考(使用 Gogs 搭建自己的 Git 服务器)。本人已实现安装好Git服务器:Gitrel.cn
创建仓库
接下来就是在Gitrel.cn上建立一个普通Git仓库,用于存放网站的源代码。创建仓库前,肯定要先注册用户,登录后右上角,有:创建新的仓库,迁移外部仓库,创建新的组织。
创建仓库后,就有一份《快速帮助》,可以让你更好的创建本地git项目
配置 Git 钩子
点击仓库设置 - 管理 Git 钩子,找到post-receive进行设置
说明:post-receive是bash脚本运行
钩子文本:
- #!/usr/bin/env bash
- "/opt/gogs/gogs" hook --config='/etc/gogs/conf/app.ini' post-receive
- #!/bin/sh
- echo '------------------'
- echo "Hooks is running..."
- # 更新本地web项目
- git --work-tree=/www/gitrel.com/ --git-dir=/home/gogs/gogs-repositories/yuzi/TestProjects.git checkout -f
- # 更新远程服务器web项目
- echo '---------------------------------------------'
- ssh -tt root@120.76.86.120 "cd /www/yuzi.me; git pull"
- echo '---------------------------------------------'
- echo "Hooray, the new version is published success!"
- echo '---------------------------------------------'
注:“更新本地web项目”是git服务器本身有web项目,可用此命令更新。
更新远程服务器web项目,是通过ssh登录,进入web目录,然后再pull下来。这里需要设置git服务器登录远程web服务器的无密钥ssh登录,即:SSH不输入密码登录
免密 SSH 登录
一、服务器1 (git服务器)
注:你现在登录的是root用户,而git是用的gogs用户,这里需要切换用户,再去生成,不然永远都会更新不成功。切换gogs用户
- # su gogs
- bash-4.2$ ssh-keygen -C "youremail@mailprovider.com"
- enter //回车
生成后:
- # cat /Users/Yuzi/.ssh/id_rsa.pub
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCiM+8Mm3iMjTB1U3HHS7ZH6aMib9+y/FLf0z0nCYBFCL6+a3UOCG2E5HfgoFEl9/44z3BLCQcVNd5aV0QzJm0d+JzlU4DwzKEjICPo2avpQrr6ECoMxnMxJzqkv05QG8HP/TlTLF2R0z+i7XCo/1xxKg0Gu20FvIbUWHqrVJxw0yyCyTgQCXZt+i+grqCqzLGsT4Po/sdBIGc0Lkm5ZuN03qJ2SnrKxL+nGeQVMNXtEll5pCho14i6rTPGMD0rLOtpSFRUsxjJynMY11ucKm+W++NgRQQe3uITveS5dL5wv1SPrRltn/3X1/iu4lrUsMCzN admin@yuzi.me
二、服务器2(web服务器)
- # mkdir .ssh //创建
- # vim .ssh/authorized_keys //编辑
- 将本地生成的ID复制到这个文件里,保存重新登录,就不用输入密码了。
以上就是实现Web项目自动化部署,依此类推,多少台服务器都可行,免密SSH登录很重要。不知道各位大牛们还有无其他解决方案,请您在评论区告知小弟,感谢!
抢沙发