美文网首页程序员
GitBlit使用钩子及时更新项目服务器

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

作者: Nardy | 来源:发表于2017-01-09 15:18 被阅读2426次

    本文只强调使用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

    相关文章

      网友评论

        本文标题:GitBlit使用钩子及时更新项目服务器

        本文链接:https://www.haomeiwen.com/subject/vmchbttx.html