利用git自动部署环境

本文共有1807个字,关键词:

前些天配置了自己服务器的git,通过自己配置的git服务器来管理自己的代码。但由于git服务器一般都没有工作区的,只有以.git结尾的文件目录。
这样一来我每次就得在ftp上把本地的代码文件复制到服务器上的运行环境,以此来保证线上的网站是最新的。
所以我就在想,应该如何在本地push代码到服务器后,服务器上的线上代码也直接更新呢?搜索发现挺多大牛都有教程的,一般都用
hooks。hooks (中文版)

在这里直接贴上我参考的教程https://argcv.com/articles/2078.c

做一下笔记:

在服务器端的 xx.git/hooks文件夹下添加一个post-receive文件

#!/bin/sh
unset GIT_DIR
NowPath=`pwd`
echo G-Punkt-Vibrator "now path is :"$NowPath
DeployPath="/tmp/deploy"
echo "deploy path is :"$DeployPath
cd hockey jerseys $DeployPath
echo "cd deploy path"
git add . -A && git stash # remove local changes 
git pull origin master # pull data from master
# the follow line is also ok:
# git add . && git fetch origin && git reset --hard origin/master
echo "deploy done"
cd $NowPath
echo "fine"
# --- Finished
exit 0

代码中的DeployPath="/tmp/deploy"就是线上部署代码的路径,我的理解是当代码push到服务器时,脚本就会执行,相当于/tmp/deploy这个文件夹重新clone了最新的代码,从而实现了线上代码的自动更新。

总结步骤

1.服务端初始化git:git init --bare test.git,并修改权限:chown -R git:git test.git
2.客户端clone并push一次。
3.服务器端在部署地址clone仓库,即网站线上的地址。如:/www/test,同时修改权限:chown -R git:git /www/test
4.在git仓库下的hooks文件夹添加post-receive文件(注意修改脚本中的文件目录),并修改权限:chmod +x post-receive
5.尽情玩耍吧。

遇到的问题

1.Permission Denied的问题
push后发现错误,提示没有权限的问题,在我这里,我发现线上代码的/tmp/deploy目录所属用户是root,我这里直接把目录的所属用户改成git,即sudo chown -R git:git /tmp/deploy,发现就行了。当然教程中也提到了解决权限的问题,但我这里的用户只有root,并没有什么web用户组的,我这里只是我个人服务器,目录权限所属用户这些可以随便我折腾,目前暂时只能先通过更改目录所属用户解决了。

2.push后post-receive没有反应
这说明post-receive的读写权限的问题,执行chmod +x post-receive即可。

「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」

fengxianqi

(๑>ڡ<)☆谢谢老板~

使用微信扫描二维码完成支付

版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。
添加新评论
暂无评论