Linux git 服务端部署钩子 hooks

 

每次在本地push代码至git服务端后,然后再到线上的开发web目录中执行git pull操作拉取本地push的代码,久而久至觉得很麻烦,便想能不能每次本地push代码后,线上的协同开发web站点自动的pull拉取代码,于是便有了以下的方案:

 

准备工作:

1、  git服务端仓库放在目录  /var/www/html/git/abc.com

2、  git客户端文件存放在目录(作为web站点目录)  /var/www/html/abc.com

 

开始工作前想的步骤如下:

1、打开 git仓库hooks目录

把post-receive.sample文件改名为post-receive,该文件的作用是当git服务端接收到客户端的push后,自动执行post-receive该文件


2、编辑/var/www/html/git/abc.com/hooks/post-receive文件

#!/bin/sh
cd /var/www/html/abc.com

git pull origin develop:develop   

 

想象大功告成。。。

 

 

现实的情况是:

 

当我在本地客户端push代码后发现服务器/var/www/html/abc.com 这个web目录并没有成功 pull 到最新的数据,并且终端上也有报错(remote: fatal: Not a git repository: ‘.’)。

一番折腾后,说是hooks目录中执行文件还是会调用该git仓库中的GIT_DIR 这个环境变量

 

post-receive文件钩子的代码改成下面的之后,运行正常了:

export GIT_WORK_TREE=/var/www/html/abc.com  #设置git客户端(同时为web站点目录)的目录路径

export GIT_DIR=${GIT_WORK_TREE}/.git    #设置GIT_DIR的路径

 

cd ${GIT_WORK_TREE}

git pull origin develop:develop


来到这里心想着,大功告成,哈哈。。。

 

然而现实总是残酷的…

 

当我在本地客户端push代码后发现,服务端的钩子还是git pull 不成功,提示

错误git host key verification failed

 

一番折腾后, 发现是我当初创建服务器git 仓库的时候用的是git 这个用户, 而我在服务器上生成公匙却是用root这个用户ssh-keygen –t rsa去生成公匙,并把公匙文件放在/home/git/.ssh/ authorized_keys文件中,这样当我一直用root用户在服务器上的git客户端(同时为web站点)的目录中去执行 git命令的时候是没有问题,但是却不知道如果我用git用户去执行git的pull push等等命令是不能用的。

 

于是,在服务器中切换git 用户,并且ssh-keygen –t rsa 重新生成公匙,并添加进/home/git/.ssh/ authorized_keys文件中

 

做完这个,心急的我,马上在本地的客户端执行push 命令,结果还是 git host key verification failed

 

*……&*&%%¥……%¥…¥…… 之后,发现我还需要以git用户在服务器中的git客户端(同时为web站点)的目录中去执行 git的命令, 比如 git pull origin 仓库  ,这样git 会提示你确认以公匙的形式操作, 就是因为这个 yes 的确认…..

 

继续…

 

在本地执行push 代码

 

结果还是报错

 

fatal: Could not read from remoterepository.
Please make sure you have the correct access rights and the repository exists.

 

一番折腾后,发现/var/www/html/abc.com 我的服务器git 客户端目录(同时为站点目录)下的文件的所有者为root,于是乎就想到是权限的问题

chown –R git:git abc.com 把文件所有者改为git

 

 

再次在本地执行push 命令

 

终于,钩子起作用了,/var/www/html/abc.com 目录成功pull 拉取了我本地的push文件。

 

总结,整个过程中,务必注意以下三点:

第一、  post-receive钩子文件的GIT_DIR环境变量问题

第二、  服务器是否以git用户去生成公匙,并且添加到authorized_keys文件,并且去执行一次服务器git客户端的拉取等命令,目的是确认刚添加的公匙以后都用来访问git服务端

第三、  确保你的git 客户端和服务端 的所有文件的,权限所有者为git这个用户

以上是本人搭建hooks钩子过程遇到的问题,希望能帮到有需要的朋友,另外如果说的不好或有错误的地方也恳请大家指出。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值