使用git hooks钩子实现gitlab的代码服务器自动更新

您所在的位置:网站首页 谷歌浏览器模拟手机浏览器插件安装 使用git hooks钩子实现gitlab的代码服务器自动更新

使用git hooks钩子实现gitlab的代码服务器自动更新

2024-01-24 09:55| 来源: 网络整理| 查看: 265

实现钩子自动触发流程图:

因为不是直接走的服务器的远程库所以不能直接使用git hooks触发,需要一个裸库做跳板。

原理,当本地提交Git库B的代码到远程gitlab库的时候,同时提交本地git库A的代码到服务器端git库A触发hooks钩子,服务器端触发脚本进入到git库B中进行git pull代码的操作,以至于实现服务器端自动更新gitlab的功能。

一:服务器端操作

1、把服务器的公钥加到云端gitlab上,实现git更新权限 添加方式可以查看 添加公钥 

2、创建一个服务器普通用户

adduser frank #添加用户 passwd frank #更改密码

3、 收集用户公钥,创建证书登录

然后将所有连接用户的公钥保存在 authorized_keys 中,就是本地生成的公钥串,一行一个。

登录frank账户或者直接切换成frank的账户操作下面的命令。

cd /home/frank/ mkdir .ssh chmod 755 .ssh touch .ssh/authorized_keys chmod 644 .ssh/authorized_keys

3、使用frank用户进入服务器使用 ssh 的方式clone git库B的代码

如果是这个项目是其他账号clone的可能会存在权限限制问题,比如是root下载的项目,想使用frank账户更新会得到类似下面的这种报错,有以下解决方案

报错

error: cannot open .git/FETCH_HEAD: Permission denied

方案1、重新使用frank账户clone项目

方案2、进入到项目对 .git/FETCH_HEAD 做 666提权 

chmod 666 .git/FETCH_HEAD

方案3、直接把 .git目录改成 775权限

4、创建服务器git裸仓库A

mkdir mycode chown frank mycode/ cd mycode git init --bare test.git #初始化仓库 chown -R frank test.git #更改所属用户

5、创建git裸库A的/test.git/hooks钩子脚本vim post-receive,保存退出

cd /mycode/test.git/hooks/

vim post-receive

#!/bin/sh unset GIT_DIR #进入代码库B cd /var/....../frank/文件夹名 #执行git pull命令 git pull #返回仓库A并退出 cd /var/....../frank/mycode/test.git exit 0

6、赋予权限

chmod +x post-receive 二:本地操作

1、本地clone git裸库A

git clone 服务器账号名称@服务器IP:自建的git地址

2、本地clone git库B

3、本地创建一个shell脚本方便快捷提交与触发钩子

#!/bin/sh ##提交git库B git pull git add Whitelist.php git commit -m '测试钩子' git push origin master ##进入本地git库A cd /Users/.......xin/mycode/test echo "`date +%s` $@" >> test.txt ##触发A服务器钩子 git add test.txt git commit -m 'test' git push origin master

当然了如果想做更多的事,比如重启一些服务器配置等,可以直接使用root账户来做



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3