Scu_laji

githook with gogs 部署

githook with gogs 部署

前言

最近在做一个外包项目,需要在 WeChat 中调试前端样式,每次提交都需要 ssh 到 web 服务器上去执行一次 git pull 操作, 感觉十分的繁琐,下面介绍下我的服务器配置情况。

  1. 一台公网 git 仓库服务器
  2. 一台公网调试用 web 服务器(与上面的不是同一台)
  3. 我的本地仓库

原理

万物都要了解原理才好下手, githook 实际上是一系列脚本文件

这些脚本文件当 git 服务器发生一些特殊情况时被执行。

所以当发生这些特殊情况时,我们就可以让 git 服务器自动的去做一些事情。

自动部署

我的需求很简单,就是省去 ssh 到服务器上 git pull 的时间(很烦的)。我看了许多网上的 githook 部署方式,发现很多采用的是 [email protected] 的方式来实现自动部署,而且需要在 web 服务器上多增加一个仓库来做中转。这样就会多一个仓库,推送的时候可能会不爽。

那么我们直接让 git 服务器 ssh 到 web 服务器上, 然后执行 git pull 不就行了吗? 反正只是一个脚本,想执行什么命令都可以的。事实证明,这种方案是可行的。

配置 ssh 自动登录

在你的 gogs 服务器上生成一个公钥

1
ssh-keygen -t rsa

使用你的 gogs 的用户去执行这个命令。

然后将 ssh 生成的公钥放到 web 服务器上。

具体可以搜索一下 ssh 免密登录,这个很 easy 的。

正题来了,写脚本

很简单,在 gogs web 端找到这个, Post-receive, 这个脚本会在接受到 push 请求后, 开始执行,我们首先 ssh 到我们的 web 服务器上,然后执行 cd 你的目录 然后执行 git pull.

安全性考虑

  1. 这种操作显然是没有那种两个仓库的方式安全, 因为前者的私钥仅在自己的 pc 上存储
  2. 但是如果限制权限的话还是挺安全的
    3.