当前位置: 首页 > 工具软件 > Ruby/Git > 使用案例 >

配置gitlab服务器的git hooks 钩子

贡威
2023-12-01

需求是本地开发分支develop推到远程仓库后自动部署测试服务器。

看很多文章,讲的非常复杂。都没讲清楚架构情况。

我们的架构是,多台本地开发机器,一台服务器,服务器上跑着测试程序和gitlab。

这边文章解决的是测试端和git远程仓库在一台机器上的情况,如果是测试程序和gitlab各自一台服务器,那比较麻烦了。

1.找到项目对应的hooks文件夹

/var/opt/gitlab/git-data/repositories/root/xxx.git/hooks/

2.修改post-receive文件

#!/bin/bash

GIT_WORK_TREE=/www/xxx
BRANCH=develop

while read oldrev newrev ref
do
    if [[ $ref =~ .*/${BRANCH}$ ]];
    then
        echo "$BRANCH ref received.  Deploying $BRANCH branch to testserver..."
        git --work-tree=${GIT_WORK_TREE} checkout ${BRANCH} -f 
    else
        echo "Ref $ref successfully received.  Doing nothing: only the $BRANCH branch may be deployed on this server."
    fi
done

BRANCH 是分支名
GIT_WORK_TREE 是测试程序目录
修改完保存。

3.设置git账户对post-receive文件执行权限。
/www/xxx目录权限也一样。
贪图省事就chmod 777。

4.测试

git push origin develop

能看到develop ref received. Deploying develop branch to testserver…

再看/www/xxx目录下文件都已经更新了。

2018.11.5 更新
这个方法其实是有问题的。
目录/var/opt/gitlab/git-data/repositories/root/xxx.git/hooks/
是一个连接指向/opt/gitlab/embedded/service/gitlab-shell/hooks/

正确的做法是到
目录/var/opt/gitlab/git-data/repositories/root/xxx.git/下
新建 custom_hooks目录 把post-receive放在该目录下。

详见:https://docs.gitlab.com/ee/administration/custom_hooks.html

 类似资料: