Gogs 设置Git钩子实现项目远程自动更新

2018.12.12 5,371 0

在没有接触到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脚本运行

钩子文本:

  1. #!/usr/bin/env bash
  2. "/opt/gogs/gogs" hook --config='/etc/gogs/conf/app.ini' post-receive
  3. #!/bin/sh
  4. echo '------------------'
  5. echo "Hooks is running..."
  6. # 更新本地web项目
  7. git --work-tree=/www/gitrel.com/ --git-dir=/home/gogs/gogs-repositories/yuzi/TestProjects.git checkout -f
  8. # 更新远程服务器web项目
  9. echo '---------------------------------------------'
  10. ssh -tt root@120.76.86.120 "cd /www/yuzi.me; git pull"
  11. echo '---------------------------------------------'
  12. echo "Hooray, the new version is published success!"
  13. echo '---------------------------------------------'

注:“更新本地web项目”是git服务器本身有web项目,可用此命令更新。

更新远程服务器web项目,是通过ssh登录,进入web目录,然后再pull下来。这里需要设置git服务器登录远程web服务器的无密钥ssh登录,即:SSH不输入密码登录

免密 SSH 登录

一、服务器1 git服务器)

注:你现在登录的是root用户,而git是用的gogs用户,这里需要切换用户,再去生成,不然永远都会更新不成功。切换gogs用户

  1. # su gogs
  2. bash-4.2$ ssh-keygen -C "youremail@mailprovider.com"
  3. enter //回车

生成后:

  1. # cat /Users/Yuzi/.ssh/id_rsa.pub
  2. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCiM+8Mm3iMjTB1U3HHS7ZH6aMib9+y/FLf0z0nCYBFCL6+a3UOCG2E5HfgoFEl9/44z3BLCQcVNd5aV0QzJm0d+JzlU4DwzKEjICPo2avpQrr6ECoMxnMxJzqkv05QG8HP/TlTLF2R0z+i7XCo/1xxKg0Gu20FvIbUWHqrVJxw0yyCyTgQCXZt+i+grqCqzLGsT4Po/sdBIGc0Lkm5ZuN03qJ2SnrKxL+nGeQVMNXtEll5pCho14i6rTPGMD0rLOtpSFRUsxjJynMY11ucKm+W++NgRQQe3uITveS5dL5wv1SPrRltn/3X1/iu4lrUsMCzN admin@yuzi.me

二、服务器2web服务器)

  1. # mkdir .ssh //创建
  2. # vim .ssh/authorized_keys //编辑
  3. 将本地生成的ID复制到这个文件里,保存重新登录,就不用输入密码了。

以上就是实现Web项目自动化部署,依此类推,多少台服务器都可行,免密SSH登录很重要。不知道各位大牛们还有无其他解决方案,请您在评论区告知小弟,感谢!

回复 匿名:
400

取消评论
全部评论 0


    抢沙发