GitBlit使用钩子及时更新项目服务器

本文只强调使用gitblit内置的钩子,与使用git hook和WebHook情况有所不同

一、先普及一下
gitblit是使用java语言开发的一个git管理工具,其后台使用的是servlet配置作为网页服务器,引用一句话:Gitblit 是一个纯 Java 库用来管理、查看和处理 Git 资料库.相当于 Git 的 Java 管理工具.git的管家。

二、gitblit钩子

gitblit钩子与git hook差不多,只是配置方式不一样,gitblit钩子的配置使用groovy进行逻辑处理,而git hook基本上使用的是shell或cmd命令。groovyJVM的一个替代语言。其语法与java相似并且可以使用import命令引入jar包。

三、配置Gitblit及目录

  1. 确保gitblit能够正常运行。[gitblit安装及配置]

  2. 在gitblit上创建一个开发用户nardy,并设置密码123456

  3. 在gitblit上新建一个项目,并git clone到服务器的<a title="服务器站点目录">${wwwroot}</a>下

> 例如服务器站点目录${wwwroot}是D:/wwwroot, 项目的远程路径是:http://admin@www.kuaishao.xin/git/kuaishao.git ,那么使用`git clone`命令之后,项目的目录就是D:/wwwroot/kuaishao
  1. 进入gitblit根目录/data/groovy目录下,新建一个文件ks-post-receive.groovy,并且编辑以下代码:
import com.gitblit.GitBlit
import com.gitblit.Keys
import com.gitblit.models.RepositoryModel
import com.gitblit.models.TeamModel
import com.gitblit.models.UserModel
import com.gitblit.utils.JGitUtils
import com.gitblit.utils.StringUtils
import java.text.SimpleDateFormat
import org.eclipse.jgit.api.PullCommand
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.lib.Config
import org.eclipse.jgit.revwalk.RevCommit
import org.eclipse.jgit.transport.ReceiveCommand
import org.eclipse.jgit.transport.ReceiveCommand.Result
import org.eclipse.jgit.util.FileUtils
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider
import org.slf4j.Logger

logger.info("localclone hook triggered by ${user.username} for ${repository.name}")

def repoName = repository.name
def rootFolder = 'D:/wwwroot/kuaishao'
def pullBranch = 'refs/heads/master'
def refgit = Git.open(new File(rootFolder + "/.git"));
PullCommand cmd = refgit.pull();

cmd.setRemoteBranchName(pullBranch)
//设置授权用户帐户
cmd.setCredentialsProvider(new UsernamePasswordCredentialsProvider('nardy', '123456'))
cmd.call();
refgit.repository.close()

// report clone operation success back to pushing Git client
clientLogger.info("${repoName} pulled to ${rootFolder}")

四、 配置GIT

打开上面clone下来的项目,进行.git目录,用户文本编辑器打开config文件,在文件末尾追加如下代码:

[remote "origin"]
  url = http://admin@www.kuaishao.xin/git/kuaishao.git
  fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
  remote = origin
  merge = refs/heads/master

五、配置gitblit的receive

  1. 打开gitblit服务器的网址,如http://www.kuaishao.xin/git (测试使用),打开目标项目
找到项目
  1. 打开项目kuaishao,点击”编辑“。
打开项目编辑
  1. 点击左边栏的“receive”。
点击receive
  1. 双击选择ks-post-receive并保存。
选中刚才新建的groovy文件名

以上为配置的所有步骤。

总结:本文解决的整个流程是:当开发者把项目提交处我们之前搭建的git服务器中,服务器触发post-receive事件,调用ks-post-receive钩子,执行groovy文件,把git版本库的文件pull到服务器站点目录下对应的项目中。

另附gitblit的groovy配置文件中使用的类的api文档:
JGIT-JavaDoc-api

推荐阅读更多精彩内容