git push自动部署能大大提交开发部署效率
git 自动部署分为2类,
- git server和部署不在同一个服务器上(比如通过github部署)
- git server和要部署的目录在同一个服务器上。
这里记录第2种情况,说明如何实现在远程服务器上搭建git server并实现git push自动部署。
0. 整体框架
我这里服务器的IP为 192.168.1.123, 工作流程如下:
- 在本地PC 的/home/my/website上开发,
- 开发完成后push到服务器上的git仓库/home/git/website.git
- git自动部署website到/home/www/website
1. 搭建gitserver
1.1 首先在服务器上创建一个git用户,用于管理gitserver
根据提示完成信息确认就创建成功了(注意使用adduser,不要使用useradd)
server$ sudo adduser git
这样创建的用户每次push都要输入密码,如果不想每次push都手动输入密码,那请参考 ubuntu服务器新建用户,并且免密码ssh登陆
注:如果部署的路径在别的用户(比如www)目录下,将git用户加入到www组
server$ sudo adduser git www
1.2 创建website.git
server$ cd /home/git
server$ git init --bare website.git
1.3 给website.git创建
server$ vi /home/git/website.git/hooks/post-receive
将下面的内容复制到post-receive文件中
#!/bin/sh
# 这就是一个普通的shell脚本,通过push触发执行
# echo的输出会显示在git push 的回显中
echo '======代码上传到服务器======'
# 进入要部署的目录, git用户进入www用户的目录操作,所以git用户要和www用户同组
cd /home/www/website
# 这个很重要,如果不取消的话将不能在cd的路径上进行git操作
unset GIT_DIR
# 通过git reset --hard 的方式部署,适应性更强
git fetch origin
git reset --hard origin/master
# 当然你可以做其他的事情
echo '========自动部署完成========'
给post-receive增加可执行权限
server$ chmod 777 /home/git/website.git/hooks/post-receive
2. 完成并测试
已经完成了gitserver的搭建,现在我们需要将website.git仓库clone 到服务器的 /home/www/website 和本地/home/my/website
clone 到/home/www/website
server$ cd /home/www
server$ git clone /home/git/website.git
clone到本地 (如果未配置)
PC$ cd /home/my/
PC$ git clone git@192.168.1.123:/home/git/website.git
测试
PC$ cd /home/my/website
PC$ touch readme.txt
PC$ git add readme.txt
PC$ git commit -m"add readme.txt"
PC$ git push
如果显示类似log表示已经可以正常工作了
remote: ======代码上传到服务器======
remote: * branch master -> FETCH_HEAD
remote: 26a9fcd..73709e9 master -> origin/master
remote: 更新 26a9fcd..73709e9
remote: Fast-forward
remote: readme.txt | 0
remote: 1 file changed, 0 insertions(+), 0 deletions(-)
remote: create mode 100644 readme.txt
remote: ========自动部署完成========