使用 git hook 实现服务器代码自动部署

前几天把 Hexo 博客部署到了阿里云服务器,但发现每次推送文章都须要去服务器同步代码。最终寻找到 git hook 来解决了这个问题html

更新于 2017.11.14
首发于夏味的博客: xiaweiss.comgit

1. 说明

在服务器,要建一个至关于 github 存放功能的裸仓库来存储代码。 之因此叫裸仓库,是由于这个仓库只是为了存代码用的,没有工做目录,不能够在它里面查看改写代码。github

在网站文件夹下,会有一个工做目录来存放代码,这个目录的代码能够像clone github代码库同样,clone 服务器里的裸仓库。vim

当服务器里裸仓库收到提交进来的代码后,会触发 git hook 的 post-receive 事件,配置好的程序就能够自动去工做目录的仓库执行 git pull,服务器代码就自动更新了bash

2. 配置步骤:

远程链接服务器,登陆 root 帐号服务器

2.1 设置用户

新增用户xiawei,这里能够写你的名字微信

useradd xiawei
复制代码

修改用户密码post

passwd 你的新密码
复制代码

给添加 sudo 权限 经过修改 /etc/sudoers学习

必须使用命令网站

visudo
复制代码

按 i 键进入, 找到 root ALL=(ALL) ALL 而后下面添加 xiawei ALL = (ALL) ALL

root ALL=(ALL) ALL
xiawei ALL = (ALL) ALL
复制代码

2.2 安装 git

查看是否安装 git

git --version
复制代码

若是没有看到版本号,则继续安装 git

yum install git
复制代码

设置 git 用户名邮箱

git config --global user.name "yourname"
git config --global user.email "your_email@example.com"
复制代码

2.3 创建git裸仓库

假设网站的在 /www/blog/ 目录下,建立裸仓库

cd /www
sudo git init --bare blog.git
复制代码

更改所属用户和用户组,得到权限

sudo chown -R xiawei:xiawei blog.git
sudo chown -R xiawei:xiawei blog
复制代码

2.4 创建工做目录 git 仓库

cd /www/blog
git clone /www/blog.git
复制代码

若是此时 blog 文件夹不是空的,会不能 clone 按先定义仓库,再设置远端仓库地址便可

cd /www/blog
git init
git remote add origin /www/blog.git
复制代码

注意这时要删除掉 index.html 等和本地待提交代码重复的文件

rm index.html
复制代码

2.5 设置 git hooks

cd /www/xiaweiss.git/hooks/
vim post-receive
复制代码

按 i 键,将下面这几行代码粘贴进去

#!/bin/sh
unset GIT_DIR
cd /www/blog
git pull origin master
复制代码

赋予 post-receive 文件可执行权限

chmod +x post-receive
复制代码

2.6 本地 配置

最后修改 Hexo 配置文件里 deploy项,每次发布代码会提交到这两个仓库

deploy:
- type: git
  repo: git@github.com:xiaweiss/xiaweiss.github.io.git
- type: git
  repo: xiawei@xiaweiss.com:/www/blog.git
复制代码

若是是本地的其余项目,能够直接

git clone xiawei@xiaweiss.com:/www/blog.git
复制代码

修改代码后,提交便可

欢迎添加我我的微信,互相学习交流
相关文章
相关标签/搜索