以前我在这篇文章里面简单的介绍了一下git钩子,pre-commit与eslint的关系与做用git钩子与eslint。
今天继续介绍另外的两个git钩子,以及使用它们来进行简单的自动化部署的两个例子。html
Git钩子就是git在特定的重要动做发生时触发自定义脚本。vue
钩子都被存储在 Git 目录下的 hooks 子目录中。 也即绝大部分项目中的 .git/hooks 。 当你用 git init 初始化一个新版本库时,Git 默认会在这个目录中放置一些示例脚本。这些示例的名字都是以 .sample 结尾,若是你想启用它们,得先移除这个后缀。react
Git 含有两种类型的钩子:客户端的和服务器端的。客户端的钩子pre-commit以前介绍过了nginx
和自动化部署有关的钩子有两个,一个是post-update,一个是github基于post-update封装的webhookgit
这里先不谈docker和jeckins,你们先想想部署的原理是什么,部署就是服务器展现目录里面的文件变成最新的文件便可
咱们能够手动把文件传上去,也能够进入服务器展现目录,让它去拉最新代码便可
若是咱们经过shell脚本让这个过程变成自动的,而且咱们能自动在某个时机执信shell脚本,是否是咱们就完成了自动化部署?github
This hook reacts to git push and updates reference(s) in its repository.
It executes on the remote repository once after all the refs have been updated.
本地git push,远程仓库xxx-bar.git全部文件更新完触发这个钩子执行咱们的shell脚本,进入www目录(nginx上配置的展现目录),从xxx-bar.git拉最新文件,完成自动化部署web
git init --bare xxx-bare.git
进入xxx-bare.git/hooks,在相关钩子里编辑脚本docker
cd /home/user/xxx-bare.git/hooks cp post-update.sample post-update vim post-update
下面再编辑post-update脚本shell
#!/bin/sh unset GIT_DIR DIR_ONE=/home/user/www/ #此目录为服务器页面展现目录 cd $DIR_ONE git init git remote add origin /home/user/xxx-bare.git git clean -df git pull origin master #核心代码,自动部署的本质
在本地test目录下 git clone 远程服务端刚才建立的裸库xxx-bare.gitvim
git clone root@你本身服务器的ip:/home/user/xxx-bar.git
1.服务器权限的问题,我建议仍是我的拥有我的的服务器比较好,root权限,想怎么整就怎么整。若是用公司的服务器,ningx访问的时候跨目录可能出问题,ssh配置也可能出问题
。
这里强烈推荐一下腾讯云,最近作活动,88玩一年,安全耐操
0.1折服务器连接。买了不会玩的能够私聊我,三陪政策,包教包会.....
2.ssh怎么配
首先登陆远程服务器,命令行输入 ssh-keygen,生成ssh公钥私钥
其次本地首先看有没有~/.ssh目录,没有的化也执行上面的操做
而后 scp ~/.ssh/id_rsa.pub [遠端主機名稱]:~/.ssh/authorized_keys (把本地共钥复制到远程服务器authorized_keys这个文件中)
再在本地的~/.ssh中添加一个config文件,里面这么写
Host qq HostName 你的qq服务器ip Port 22 User root IdentityFile ~/.ssh/id_rsa
大功告成,当在控制台输入ssh qq 就自动脸上qq服务器了
介绍了post-update钩子以及利用它进行简单自动化部署的实例。并对其中各类可能遇到的问题作了说明。但愿能给你们带来一些帮助。原本准备把webhook也写了的,可是因为篇幅缘由,只能在下篇文章中介绍webhook,以及利用webhook部署一个真实的vue项目啦。
题外话,写文章真的很辛苦,写了这么久了,居然一个打赏也没收到,已哭晕。有没有哪位大哥能给个打赏,让我开开荤,支持支持我呗......