使用git hooks钩子实现gitlab的代码服务器自动更新 |
您所在的位置:网站首页 › 谷歌浏览器模拟手机浏览器插件安装 › 使用git hooks钩子实现gitlab的代码服务器自动更新 |
实现钩子自动触发流程图:
因为不是直接走的服务器的远程库所以不能直接使用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_keys3、使用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 06、赋予权限 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 |