githooks自动部署
githooks实现自动部署到服务器
简述
travis只能部署开源的项目,并且travis部署过程中出现问题,极其难以调试,对账号和服务器都有安全风险,并且使用travis,源仓库就不能放在服务器上.
如果是部署在服务器上,无论是开源还是闭源项目,githooks
都是简单好用且安全的方法
- 在服务器上设置好
githooks
- 本地push代码触发
hooks
,完成自动部署
使用traivs
自动化部署可参考–> travis
实现自动化部署
环境准备
主要是服务器上关于git的设置
服务器
服务器使用阿里云或者腾讯云都可以,配置基本可以走最低配置,大多数时候只跑一个nginx而已.系统选择ubuntu
或者centos
.下面以ubuntu18.04
的阿里云为例
登录服务器以后先更新系统
1
2
root# apt update
root# apt upgrade
为了避免安全风险,应该先建立一个带有sudo权限的普通用户部署博客.按照linux新建用户里面的方法新建. 之后所有操作切换到普通用户进行.
git
安装git
服务器上需要安装git
工具
1
$ sudo apt install git
nginx
ngix
在服务器上的安装与设置请参考Nginx安装配置
配置好环境以后,root
的路径先不用配置
部署过程
主要是生成hooks Repositories
,触发后编译静态网页,nginx
部署
生成hooks Repositories
这一步的操作在服务器上完成
1
2
$ cd ${workspace}
$ git init --bare ${hooks-name}.git
在git init
时加上--bare
参数声明生成的仓库是一个空的bare
仓库,这个仓库就是我们要使用的githooks
仓库
1
$ cd ${workspace}/${hooks-name}.git/hooks
这里就是存放触发脚本的地方,在此目录下新建触发脚本post-receive
.设置执行权限chmod +x post-receive
进入你想要放置源码的目录
1
$ cd ${sourcespace}
将githooks
仓库clone过来
1
$ git clone ${workspace}/${hooks-name}.git
${sourcespace}
目录会多出一个${hooks-name}
文件夹.以后,每次推送代码触发hooks
,hooks
机会将代码同步到这个文件夹
回到githooks
目录,设置触发脚本,内容如下
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
unset GIT_DIR
NowPath=`pwd`
DeployPath="${sourcespace}/${hooks-name}"
cd $DeployPath
git config user.email ${email}
git config user.name ${user}
git add . -A && git stash
git pull origin master
bash ${script-name}.sh
其中${script-name}.sh
是触发hooks
,同步完代码以后执行的脚本,你可以在里面添加你想要执行的任意代码,如编译静态网页等
本地Repositories
设置
1
2
$ cd ${sourcesapce}
$ mkdir ${script-name}.sh
在里面添加编译的脚本,如
1
2
3
4
5
6
7
# jekyll
bundle install
jekyll build
# hexo
npm install
npm build
然后git commit
提交代码.开始添加远程仓库
1
$ git remote add ${hooks} ${user}@${youripaddr}:${workspace}/${hooks-name}.git
添加完以后push
代码
1
$ git push ${hooks} master
服务器上的hooks
接收push
代码以后,就会同步到${sourcespace}/${hooks-name},同时执行${script-name}.sh
.完成自动编译
nginx部署
在nginx
配置文件中将目录指向编译生成的_site
1
2
3
4
5
location / {
root ${sourcespace}/${hooks-name}/site;
index index.html index.htm;
}
整个自动化部署流程就结束了,以后每次在本地push代码都会触发自动化部署
多人协作
一般一个复杂的项目可能由多人完成,每个人只负责其中一部分.也值需要更新一部分,每个人的执行脚本可能都不一样,那么每个人都可以在服务器上生成自己的githooks
仓库.然后在${sourcespace}
下git clone
多个hooks
仓库就能实现多人协作自动部署
但是避免代码混乱,建议还是使用相同的hooks
,这样子源码不会出现无法commit
的情况
note
- ${}都需要进行替换
issues
如果有疑惑或错误,请提issues –> Issues