MENU

linux使用git自动部署web文件

很早以前就想实现openshift那样通过git提交代码自动部署到演示站这样的功能,之前粗略的查了下资料了解了大概,今天偶然需要用到这个功能,网上查了下资料,实现了下.

一开始想"客户端提交->web目录"这样实现,但是发现git仓库文件貌似不是直接储存的,网上找了些资料几乎都是"客户端提交->远程仓库触发hook->web目录下再拉取一次"这样的方法.
首先安装git创建git用户,然后再设置一个远程仓库,这样一个git仓库,然后切换到web目录内clone一下远程仓库的代码

apt-get install git -y #安装git
#创建git用户,写公钥文件到git用户 
adduser git
su - git
mkdir .ssh
echo "你的公钥" > authorized_keys
#创建仓库
mkdir yaf.git && cd yaf
git --bare init
#至此一个仓库就建好了
#换个文件夹尝试克隆仓库
cd ~ && git clone yaf.git #这步无错误就说明此仓库可以正常使用了 

然后将刚刚克隆的目录内的所有文件复制到你的web目录下,这样会有代码冲突,解决的方法我也不知道,我是新建的一个目录,代码克隆之后直接用的新目录作为web目录
下面是关键了,网上查询资料发现每次提交代码时会触发hook目录下post-receive文件,先尝试在里面写

#/bin/bash
cd /data/wwwroot/yaf && git pull origin/master

结果发现不会正常执行,里面加入echo "1234445" > /home/git/123.txt发现1234445可以被正常写出到文件手动执行post-receive却可以正常拉取文件,一开始怀疑权限问题,仔细检查每个目录和文件的权限均无异常,最后网上找来各种说明和示例,大部分不可用,最后在csdn上找到了一个脚本可以正常执行看起来作者是embbnux,但估计被copy了无数次,不一定是真正作者,总之能用就行.

#/bin/sh

IS_BARE=$(git rev-parse --is-bare-repository)  
if [ -z "$IS_BARE" ]; then  
echo >&2 "fatal: post-receive: IS_NOT_BARE"  
exit 1  
fi  
   
unset GIT_DIR  
DeployPath="/var/web"  #你的web目录,绝对路径
   
echo "==============================================="  
cd $DeployPath  
echo "deploying the test web"  

git fetch --all  
git reset --hard origin/master  
   
time=`date`  
echo "web server pull at webserver at time: $time."  
echo "================================================"  

这个脚本我第一次跑没成功的,原因是第一次web目录还没有克隆过远程仓库,没有远程仓库的地址,web目录需要克隆下远程仓库或者添加远程仓库的地址为origin才可以.
注意权限问题,post-receive需要设置成www用户,如果你不需要直接修改web目录下的文件则使用git用户便可.
另外说下其他机器提交代码时仓库地址,git@192.168.10.127:yaf.git,git就是刚才创建的git用户,192.168.10.127就是服务器的ip,换成域名也行,yaf.git则是路径,git用户的目录是/home/git,仓库的目录是/home/git/yaf.git,所以这里的:yaf.git换成:/home/git/yaf.git也可以.

996.icu 996.icu