美文网首页
gitlab pre-receive钩子

gitlab pre-receive钩子

作者: hanshan426 | 来源:发表于2019-01-07 20:26 被阅读0次

    概述

    当我们需要对git提交的相关内容做校验时,可以使用服务端的pre-receive钩子。相对于客户端的pre-commit钩子来说,它便于统一管理维护。pre-commit需要将处理脚本添加到客户端代码仓库的.git/hooks目录下,当clone后需要重新进行添加,所以通常采用服务端的pre-receive来替代。

    pre-receive可以对push的内容做校验,如果校验脚本正常退出(exit 0)即允许push,反之会拒绝客户端进行push操作。

    服务端配置

    • 查看hooks脚本路径
    sudo vi /etc/gitlab/gitlab.rb
    #gitlab_shell['custom_hooks_dir'] = "/opt/gitlab/embedded/service/gitlab-shell/hooks"
    
    $ll
    total 12
    -rwxr-xr-x 1 root root 686 Jan  3 07:42 post-receive
    -rwxr-xr-x 1 root root 296 Jan  7 19:05 pre-receive
    -rwxr-xr-x 1 root root 593 Jan  3 07:42 update
    

    pre-receive脚本可以是shell、python、ruby等任何可执行脚本,需要注意它的权限。pre-receive钩子会从标准输入获取三个参数:旧版本号,新版本号,分支。同时还提供了内置的许多环境变量可以使用,详情可以参考官方文档

    • 编写脚本
      这里以校验提交内容为例给出示例脚本,仅供参考,更多的示例请查看官方示例
    #!/bin/bash
    
    while read oldVersion newVersion branch; do
        echo ${oldVersion}
        echo ${newVersion}
        echo ${branch}
    
        diff=`git diff --name-status $oldVersion $newVersion`
        echo $diff
    
        for file in $diff
        do
            if [ "${#file}" -lt "2" ];then
                continue
            fi
            echo $file
    
            diffContent=`git show $newVersion:test.txt`
            echo $diffContent
            #对diff文件内容做校验,如果不符合条件则exit -1
        done
    done
    
    exit 0
    

    相关文章

      网友评论

          本文标题:gitlab pre-receive钩子

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